天天看點

STL源碼剖析 疊代器(iterator)概念與程式設計技法(三)

1 STL疊代器原理

1.1  疊代器(iterator)是一中檢查容器内元素并周遊元素的資料類型,STL設計的精髓在于,把容器(Containers)和算法(Algorithms)分開,而疊代器(iterator)就是這個橋梁。

1.2  疊代器(iterator)類型

STL源碼剖析 疊代器(iterator)概念與程式設計技法(三)

1.3 疊代器功能說明

疊代器類别          說明
輸入 從容器中讀取元素。輸入疊代器隻能一次讀入一個元素向前移動,輸入疊代器隻支援一遍算法,同一  個輸入疊代能兩遍周遊一個序列
輸出   向容器中寫入元素。輸出疊代器隻能一次一個元素向前移動。輸出疊代器隻支援一遍算法,統一輸出 疊代器不能兩次周遊一 個序列
正向  組合輸入疊代器和輸出疊代器的功能,并保留在容器中的位置
雙向   組合正向疊代器和逆向疊代器的功能,支援多遍算法
随機通路 組合雙向疊代器的功能與直接通路容器中任何元素的功能,即可向前向後跳過任意個元素

1.4 參考圖例和疊代器的操作:

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

疊代器操作 說明
所有疊代器
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
STL源碼剖析 疊代器(iterator)概念與程式設計技法(三)

2 STL疊代器作用

疊代器的作用其實相當于一個智能指針,它指向容器内部的資料,可以通過operator *操作符來解指針獲得資料的值,也可以通過operator ->操作符來擷取資料的指針,還能夠重載++,--等運算符來移動指針。

3 疊代器(iterator)延伸

網站:http://www.cplusplus.com/reference/iterator/

4 容器支援疊代器(iterator)如下

容器 支援的疊代器類别 說明
vector 随機通路 一種随機通路的數組類型,提供了對數組元素進行快速随機通路以及在序列尾部進行快速的插入和删除操作的功能。可以再需要的時候修改其自身的大小
deque 随機通路 一種随機通路的數組類型,提供了序列兩端快速進行插入和删除操作的功能。可以再需要的時候修改其自身的大小
list 雙向 一種不支援随機通路的數組類型,插入和删除所花費的時間是固定的,與位置無關。
set 雙向 一種随機存取的容器,其關鍵字和資料元素是同一個值。所有元素都必須具有惟一值。
multiset 雙向 一種随機存取的容器,其關鍵字和資料元素是同一個值。可以包含重複的元素。
map 雙向 一種包含成對數值的容器,一個值是實際資料值,另一個是用來尋找資料的關鍵字。一個特定的關鍵字隻能與一個元素關聯。
multimap 雙向 一種包含成對數值的容器,一個值是實際資料值,另一個是用來尋找資料的關鍵字。一個關鍵字可以與多個資料元素關聯。
stack 不支援 擴充卡容器類型,用vector,deque或list對象建立了一個先進後出容器
queue 不支援 擴充卡容器類型,用deque或list對象建立了一個先進先出容器
priority_queue 不支援 擴充卡容器類型,用vector或deque對象建立了一個排序隊列

 ok上面基本包括了STl源碼剖析(侯傑)第三章的基本知識點,deque、map、list、stack、vector是我下面重點學習的内容,其他的需要在提出吧!(當然上面是以知識點都可以在疊代器(iterator)延伸中查找!)

 期待将持續更新,敬請關注! syw_selfimpr新浪微網誌位址: http://weibo.com/u/2945271402 

注:以上由本人整理學習,為經本人同意請勿傳播、copy,轉載請說明出處,謝謝!

繼續閱讀