快轉到主要內容

認識 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 於是這邊就先簡單介紹了一些基本操作。

Piau 的筆記本
作者
Piau 的筆記本
希望我寫下來的東西能夠長久的記在我的腦中