代碼片段:
int ia[] = {0,1,2,3,4,5,6,7};
std::vector v5(ia, ia+8); // 括號裡放陣列名/指標
疑問:`vector` 建構子括號裡放的是陣列名 `ia` 和 `ia+8`,這是指標嗎?代表什麼意思?
std::vector 提供建構子模板:
template
vector(InputIterator first, InputIterator last);
功能:複製範圍 [first, last)(包含 first,不包含 last)內的所有元素到 vector。
ia 相當於 `ia[0]` 的地址,ia+8 相當於 `ia[8]` 的地址(尾後位置)。ia: [0][1][2][3][4][5][6][7]
↑ ↑
ia (first) ia+8 (last)
vector v5 複製得到:{0,1,2,3,4,5,6,7}
| 特性 | 陣列 int ia[8] | 指標 int* p |
|---|---|---|
| 型別 | int[8] | int* |
| `sizeof` | 整個陣列大小 (32 bytes) | 指標大小 (4/8 bytes) |
| 可修改性 | 不可修改(非左值) | 可修改指向 |
| 隱式轉換 | 大多數情境轉為 `int*` | 本身即指標 |
結論:此處 `ia` **表現為**指向首元素的指標,**本質上**是陣列。C++ 標準庫設計利用指標作為最基礎的迭代器,實現了對 C 風格陣列的無縫支援。
// C++11 起,使用 std::begin/end 更安全、可讀、支援所有容器
std::vector v5(std::begin(ia), std::end(ia));
// 或範圍建構子 (C++23 提案中,目前可用範圍構造)
std::vector v5(ia, ia + std::size(ia)); // 需
[ia, ia+8) 區間元素。