一:初識迭代器(iterator類) 簡寫為 iter
(1)由來,我們知道string類 vector類的物件,可以通過下標運算來訪問元素;還有另外一種更通用的機制 -- 迭代器。不管你是用到 vector 還是list 或 map類你總離不開迭代器的。
(2)所有標準庫容器都可以使用迭代器,但是其中只有幾種容器才同時支援下標運算子。(string不屬於容器型別,但是基本操作與容器類似)
(3)類似於指標型別,迭代器也提供了對物件的間接訪問:iter可以訪問某個元素,從乙個元素移動到另乙個元素。(iter物件是容器中的元素或者string物件中的字元)
(4)iter有有效和無效之分,這一點和指標差不多,有效的iter或指向某個元素或指向尾元素的下一位置,其它的都是無效位置。
(5)與指標不同的,iter不是使用取位址符(&),而是有返回迭代器型別的成員,如begin()(指向第乙個元素的位置),end()(指向尾元素的下乙個位置)。
二:迭代器給我們帶來了什麼
(1)迭代器支援的運算子
(*iter) :所指向元素的引用
iter->mem :解引用iter,並獲取該元素的名為mem的成員,等價於(*iter).mem
++iter :指向下乙個元素
--iter :指向上乙個元素
iter1 == iter2 : 兩個迭代器是否指向同乙個元素
iter1 != iter2
(2)程式設計風格:再迴圈條件結束的條件,c++程式設計師習慣性地使用 != 而非 < ;這是因為iter迭代器都定義了 == 和 != ,而它們中的大多數都沒有定義 < 運算子。
(3) 只有string 和 vector 等一些標準庫型別 有下標運算子;
vector::iterator it;// 讀寫,普通迭代器
vector::const_iterator it; 僅讀 --> 類似於常量指標,常量迭代器
(4)c+11 引入了 cbegin() 和 cend(),返回常指標iter(類似於指標)
(*iter).empty(),括號不能少的 或者it->mem (這等同於(*iter).mem );(*iter) 解引用迭代器可獲得迭代器所指向的物件;如果該物件恰好是類,就有可能希望進一步訪問它的成員。
(5)謹記一句話,但凡使用了迭代器的迴圈體,都不要向迭代器所屬的容器新增元素。
初識STL 迭代器List
stl有6大元件 迭代器 iterator 是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的位址。迭代器修改了常規指標的介面,所謂迭代器是一種概念上的抽象 那些行為上像迭代器的東西都可以叫做迭代器。迭代器提供一些基本操作符 這些操作和c c 操作array...
容器,演算法,迭代器初識
stl 最常用的是容器是vector,可以理解為陣列。vector存放內建資料型別 容器 vector 演算法 for each 迭代器 vector iterator 標準演算法標頭檔案 include include using namespace std include include 標準演...
c 容器演算法迭代器初識 容器演算法迭代器
c 容器演算法迭代器初識 容器演算法迭代器 stl中最常用的為迭代器vector,可以理解為陣列,下面我們將學習如何向這個容器 中插入資料 並遍歷這個容器 容器 vector 演算法 for each 迭代器 vector iteator include include include using ...