C 迭代器(指標)
// This creates an array with 5 values.
const int array[] = { 1, 2, 3, 4, 5 };
#ifdef BEFORE_CPP11
// You can use `sizeof` to determine how many elements are in an array.
const int* first = array;
const int* afterLast = first + sizeof(array) / sizeof(array[0]);
// Then you can iterate over the array by incrementing a pointer until
// it reaches past the end of our array.
for (const int* i = first; i < afterLast; ++i) {
std::cout << *i << std::endl;
}
#else
// With C++11, you can let the STL compute the start and end iterators:
for (auto i = std::begin(array); i != std::end(array); ++i) {
std::cout << *i << std::endl;
}
#endif
此程式碼將輸出數字 1 到 5,每行一個,如下所示:
1
2
3
4
5
打破它
const int array[] = { 1, 2, 3, 4, 5 };
此行建立一個包含 5 個值的新整數陣列。C 陣列只是指向記憶體的指標,其中每個值一起儲存在一個連續的塊中。
const int* first = array;
const int* afterLast = first + sizeof(array) / sizeof(array[0]);
這些行建立了兩個指標。第一個指標給出陣列指標的值,該指標是陣列中第一個元素的地址。在 C 陣列上使用時,sizeof
運算子以位元組為單位返回陣列的大小。除以元素的大小,這給出了陣列中元素的數量。我們可以用它來查詢陣列後塊的地址。
for (const int* i = first; i < afterLast; ++i) {
這裡我們建立一個指標,我們將它用作迭代器。它用我們想要迭代的第一個元素的地址初始化,只要 i
小於 afterLast
,我們就會繼續迭代,這意味著只要 i
指向 array
中的一個地址。
std::cout << *i << std::endl;
最後,在迴圈中,我們可以通過解除引用來訪問我們的迭代器 i
所指向的值。這裡取消引用運算子*
返回 i
中地址的值。