標頭檔案
<iterator>
迭代器定義
迭代器是指向一個元素序列(如陣列或容器)中的某個元素,並且能夠使用一組運算子(至少包括遞增(++
)和解引用(*
)運算子)遍歷該序列元素的任何物件。
最明顯的迭代器形式是指標:指標可以指向陣列中的元素,並可以透過遞增運算子(++
)在它們之間迭代。但其他型別的迭代器也是可能的。例如,每種容器型別(如list)都有一個專門用於遍歷其元素的迭代器型別。
請注意,雖然指標是迭代器的一種形式,但並非所有迭代器都具有與指標相同的多功能性;根據迭代器支援的屬性,它們被分為五個不同的類別
迭代器類別
根據其實現的類容,迭代器分為五類
輸入和輸出迭代器是最有限的迭代器型別:它們可以執行順序的單次輸入或輸出操作。
前向迭代器具有輸入迭代器的所有功能,並且(如果它們不是常量迭代器)還具有輸出迭代器的功能,儘管它們僅限於在一個方向上遍歷序列(前向)。所有標準容器都支援至少前向迭代器型別。
雙向迭代器類似於前向迭代器,但也可以向後迭代。
隨機訪問迭代器實現了雙向迭代器的所有功能,並且還能夠非順序地訪問範圍:可以透過將偏移量應用於迭代器來直接訪問遠距離的元素,而無需遍歷中間的所有元素。這些迭代器具有與標準指標類似的功能(指標是此類別中的迭代器)。
每個迭代器類別的屬性是
類別 | 屬性 | 有效的表示式 |
所有類別 | 可複製構造、可複製賦值和可析構 | X b(a); b = a; |
可以遞增 | ++a a++ |
隨機訪問 | 雙向 | 前向 | 輸入 | 支援相等/不相等比較 | a == b a != b |
可作為右值解引用 | *a a->m |
輸出 | 可作為左值解引用 (僅適用於可變迭代器型別) | *a = t *a++ = t |
| 預設可構造 | X a; X() |
多遍:解引用或遞增都不會影響解引用能力 | { b=a; *a++; *b; } |
| 可以遞減 | --a a-- *a-- |
| 支援算術運算子+和- | a + n n + a a - n a - b |
支援迭代器之間的比較(<, >, <=和>=) | a < b a > b a <= b a >= b |
支援複合賦值運算+=和-= | a += n a -= n |
支援偏移量解引用運算子([]) | a[n] |
其中X是迭代器型別,a和和 b是此迭代器型別的物件,t是由迭代器型別指向的型別的物件,而n是一個整數值。
更多詳細資訊,請參閱輸入迭代器、輸出迭代器、前向迭代器、雙向迭代器和隨機訪問迭代器的參考。