STL原始碼剖析 迭代器

2021-07-03 18:51:51 字數 1457 閱讀 8471

一、迭代器

迭代器五種相應型別:

1. valuetype,是指迭代器所指物件的型別。

2. differencetype,用來表示迭代器之間的距離,可以用來表示乙個容器的最大容量。例如stl中的count()函式,其返回值就是difference type。

3. referencetype,在c++中如果要傳回左值都是以by reference的方式進行。

4. pointertype,傳回乙個左值,令它代表p所指之物的位址也是可以的,也就是說我們能過傳回乙個pointer,指向迭代器所指之物。

5. iterator_category。

迭代器的五種類別:

1. inputiterator,這種迭代器所指的物件,不允許外界改變,唯讀。

2. outputiterator,只寫

3. forwarditerator,允許寫入型演算法,在此種迭代器所形成的區間上進行讀寫操作。

4. bidirectionaliterator,可雙向移動,某些演算法需要逆向走訪某個迭代區間,選用。

5. randomaccess iterator,前四中迭代器都只**一部分指標算術能力(前三種支援operate++,第四種再加上operate- -),第五種覆蓋所有的指標算術能力,包括p+n,p-n,p[n],p1-p2,p1 容器

支援的迭代器類別

說明vector

隨機訪問

一種隨機訪問的陣列型別,提供了對陣列元素進行快速隨機訪問以及在序列尾部進行快速的插入和刪除操作的功能。可以再需要的時候修改其自身的大小

deque

隨機訪問

一種隨機訪問的陣列型別,提供了序列兩端快速進行插入和刪除操作的功能。可以再需要的時候修改其自身的大小

list

雙向一種不支援隨機訪問的陣列型別,插入和刪除所花費的時間是固定的,與位置無關。

set雙向

一種隨機訪問的容器,其關鍵字和資料元素是同乙個值。所有元素都必須具有惟一值。

multiset

雙向一種隨機訪問的容器,其關鍵字和資料元素是同乙個值。可以包含重複的元素。

map雙向

一種包含成對數值的容器,乙個值是實際資料值,另乙個是用來尋找資料的關鍵字。乙個特定的關鍵字只能與乙個元素關聯。

multimap

雙向一種包含成對數值的容器,乙個值是實際資料值,另乙個是用來尋找資料的關鍵字。乙個關鍵字可以與多個資料元素關聯。

stack

不支援介面卡容器型別,用

vector

,deque

或list

物件建立了乙個先進後出容器

queue

不支援介面卡容器型別,用

deque

或list

物件建立了乙個先進先出容器

priority_queue

不支援介面卡容器型別,用

vector

或deque

物件建立了乙個排序佇列

STL原始碼剖析 迭代器

迭代器是一種模式,實現了通過乙個統一介面訪問stl容器的方法。stl作為橋梁鏈結了stl演算法與容器。例如,我們可以通過sort a.begin a.end 完成一次利用演算法對vector型別容器a的排序。標準stl中,迭代器在容器內部,每種容器都有自己專屬的迭代器。這樣做的原因是,如果要建立迭代...

stl原始碼剖析01 迭代器

下面介紹乙個容器 演算法 迭代器在一起使用的案例 templateinputiterator find inputiterator first,inputiterator last,const t value include include include include include using...

重讀STL原始碼剖析 迭代器

首先關於迭代器 迭代器不屬於容器,它與容器屬於不同的類,但通過迭代器 迭代器中有某些成員變數 同時也對 等運算子進行了過載 可以訪問到容器內的元素 比如list的迭代器,它不屬於list,但它裡面存放了乙個指標,這個指標指向list結構裡的成員node,這樣就可以借用迭代器去訪問容器了。迭代器並不屬...