開啟章節選單
認識 Iterator
普通簡介
在 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
於是這邊就先簡單介紹了一些基本操作。
小測驗
以下哪個可以正確的取得 Iterator 指向的值?