簡介#
在 C++ 的 STL 中,iterator 是一個類似指標的物件,通常會指向容器中的某個元素。透過 iterator 我們可以方便地存取容器中的元素,並且根據容器的不同,iterator 也有稍微不同的操作方式。
這個章節將會簡單介紹 iterator 的基本操作,你會在未來的學習中遇到更多的 iterator 應用,並且通常需要搭配後面的章節才能更好地理解與使用,所以如果你對 iterator 還不太熟悉的話,不用擔心,繼續往接下來的章節讀你就會慢慢掌握了!
常見操作#
即便 iterator 的操作方式因容器而異,但有一些操作是大部分容器都會支援的。接下來我們會介紹一些常見的操作。
取值#
* 運算子可以取得 iterator 指向的元素。
cout << *it << endl;
往前 / 往後#
++ 運算子可以將 iterator 往後移動一個位置,而 -- 運算子可以將 iterator 往前移動一個位置。
it++; // 往後移動
it--; // 往前移動
也可以使用 next() 和 prev() 函式。
it = next(it); // 往後移動
it = prev(it); // 往前移動
部分容器也支援直接指定移動的步數。
it += 2; // 往後移動兩個位置
it -= 3; // 往前移動三個位置
it + 2; // 代表往後移動兩個位置的 iterator,但不會改變原本的 iterator
it - 3; // 代表往前移動三個位置 iterator,但不會改變原本的 iterator
有些容器還支援透過相減兩個 iterator 來取得兩者之間的距離。
int distance = it2 - it1; // it2 比 it1 往後移動了 distance 個位置
比較#
==、!= 運算子可以用來比較兩個 iterator 是否指向同一個元素。
if (it1 == it2) {
cout << "it1 and it2 are pointing to the same element" << endl;
}
結語#
也許你會疑惑,為什麼 iterator 會放在這個陣列單元呢?當然,iterator 並不是陣列的一部分,不過在操作陣列時,我們會用到 iterator 於是這邊就先簡單介紹了一些基本操作。
