STL迭代器簡介

2021-06-20 08:00:48 字數 2143 閱讀 7556

stl迭代器簡介

標準模板庫

(the standard template library, stl)

定義了五種迭代器。下面的圖表畫出了這幾種:

input         output

\            /

forward

|bidirectional

|random access

要注意,上面這圖表並不是表明它們之間的繼承關係:而只是描述了迭代器的種類和介面。處於圖表下層的迭代器都是相對於處於圖表上層迭代器的擴張集。例如:forward迭代器不但擁有input和output迭代器的所有功能,還擁有更多的功能。

各個迭代器的功能如下:

迭代器類別

說明輸入

從容器中讀取元素。輸入迭代器只能一次讀入乙個元素向前移動,輸入迭代器只支援一遍演算法,同乙個輸入迭代器不能兩遍遍歷乙個序列

輸出向容器中寫入元素。輸出迭代器只能一次乙個元素向前移動。輸出迭代器只支援一遍演算法,統一輸出迭代器不能兩次遍歷乙個序列

正向組合輸入迭代器和輸出迭代器的功能,並保留在容器中的位置

雙向組合正向迭代器和逆向迭代器的功能,支援多遍演算法

隨機訪問

組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向後跳過任意個元素

迭代器的操作:

每種迭代器均可進行包括表中前一種迭代器可進行的操作。

迭代器操作

說明所有迭代器

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如果迭代器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物件建立了乙個排序佇列

STL迭代器簡介

stl將容器 containers 和演算法 algorithms 分隔開,兩者之間的紐帶就在於迭代器 iterators 迭代器也是一種智慧型指標,過載了例如常見的operator 以及operator 迭代器有常見的五種相應型別 iterator category value type diff...

STL容器簡介以及迭代器介紹

容器 container 是用於存放資料的類模板。在使用容器時,即將容器類模板例項化為容器類時,會指明容器中存放的元素是什麼型別的。在容器中,可以存放基本型別的變數,也可以存放物件,而物件或基本型別的變數被插入容器中時,實際插入的是物件或變數的乙個複製品。容器分為兩大類,順序容器和關聯容器。順序容器...

迭代器簡介

迭代器提供了比下標操作更通用的遍歷容器雷元素的方法。其對所有的容器都適用,現代c 程式更加傾向於適用迭代器而不是下標操作。迭代器測試 vector iterator begin v3.begin 指向容器的第乙個元素 vector iterator end v3.end z指向容器末端元素的下乙個 ...