【C++】:STL迭代器使用
僅僅轉了迭代器的功能,該文裡還有例子。然後 搜這個的原因是因為list裡迭代器不可 += 只可++||--想知道下為什麼。以下為轉載內容。
迭代器的作用:
- 能夠讓迭代器與演算法不干擾的相互發展,最後又能無間隙的粘合起來。
- 過載了*,++,==,!=,=運算子。用以操作複雜的資料結構。
- 容器提供迭代器,演算法使用迭代器。
各個迭代器的功能如下:
迭代器類別 |
說明 |
輸入 |
從容器中讀取元素。輸入迭代器只能一次讀入一個元素向前移動,輸入迭代器只支援一遍演算法,同一個輸入迭代器不能兩遍遍歷一個序列 |
輸出 |
向容器中寫入元素。輸出迭代器只能一次一個元素向前移動。輸出迭代器只支援一遍演算法,統一輸出迭代器不能兩次遍歷一個序列 |
正向 |
組合輸入迭代器和輸出迭代器的功能,並保留在容器中的位置 |
雙向 |
組合正向迭代器和逆向迭代器的功能,支援多遍演算法 |
隨機訪問 |
組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向後跳過任意個元素 |
迭代器的操作:
每種迭代器均可進行包括表中前一種迭代器可進行的操作。
迭代器操作 |
說明 |
所有迭代器 |
|
p++ |
後置自增迭代器 |
++p |
前置自增迭代器 |
輸入迭代器 |
|
*p |
復引用迭代器,作為右值 |
p=p1 |
將一個迭代器賦給另一個迭代器 |
p==p1 |
比較迭代器的相等性 |
p!=p1 |
比較迭代器的不等性 |
輸出迭代器 |
|
*p |
復引用迭代器,作為左值 |
p=p1 |
將一個迭代器賦給另一個迭代器 |
正向迭代器 |
提供輸入輸出迭代器的所有功能 |
雙向迭代器 |
|
--p |
前置自減迭代器 |
p-- |
後置自減迭代器 |
隨機迭代器 |
|
p+=i |
將迭代器遞增i位 |
p-=i |
將迭代器遞減i位 |
p+i |
在p位加i位後的迭代器 |
p-i |
在p位減i位後的迭代器 |
p[i] |
返回p位元素偏離i位的元素引用 |
p<p1 |
如果迭代器p的位置在p1前,返回true,否則返回false |
p<=p1 |
p的位置在p1的前面或同一位置時返回true,否則返回false |
p>p1 |
如果迭代器p的位置在p1後,返回true,否則返回false |
p>=p1 |
p的位置在p1的後面或同一位置時返回true,否則返回false |
只有順序容器和關聯容器支援迭代器遍歷,各容器支援的迭代器的類別如下:
容器 |
支援的迭代器類別 |
說明 |
vector |
隨機訪問 |
一種隨機訪問的陣列型別,提供了對陣列元素進行快速隨機訪問以及在序列尾部進行快速的插入和刪除操作的功能。可以再需要的時候修改其自身的大小 |
deque |
隨機訪問 |
一種隨機訪問的陣列型別,提供了序列兩端快速進行插入和刪除操作的功能。可以再需要的時候修改其自身的大小 |
list |
雙向 |
一種不支援隨機訪問的陣列型別,插入和刪除所花費的時間是固定的,與位置無關。 |
set |
雙向 |
一種隨機存取的容器,其關鍵字和資料元素是同一個值。所有元素都必須具有惟一值。 |
multiset |
雙向 |
一種隨機存取的容器,其關鍵字和資料元素是同一個值。可以包含重複的元素。 |
map |
雙向 |
一種包含成對數值的容器,一個值是實際資料值,另一個是用來尋找資料的關鍵字。一個特定的關鍵字只能與一個元素關聯。 |
multimap |
雙向 |
一種包含成對數值的容器,一個值是實際資料值,另一個是用來尋找資料的關鍵字。一個關鍵字可以與多個數據元素關聯。 |
stack |
不支援 |
介面卡容器型別,用vector,deque或list物件建立了一個先進後出容器 |
queue |
不支援 |
介面卡容器型別,用deque或list物件建立了一個先進先出容器 |
priority_queue |
不支援 |
介面卡容器型別,用vector或deque物件建立了一個排序佇列 |