迭代器提供對乙個容器的物件的訪問方法。迭代器就如同乙個指標。事實上,c++的指標也是一種迭代器,但是迭代器不僅僅是指標
除了使用下標來訪問 vector 物件外,標準庫還提供了另一種訪問元素的方法:使用迭代器。迭代器是一種檢查容器內元素並遍歷元素的資料型別
標準庫為每一種標準容器定義了一種迭代器類。迭代器型別提供了比下標操作更加通用化的方法。所有的標準庫容器都定義了相應的迭代器型別,而只有少數的容器支援下標操作。
1.1 iterator 型別
每個標準庫容器都定義了乙個名為iterator的成員,用來定義自己的迭代器
- vector :: iterator iter;
- list :: iterator iter;
1.2 begin 和 end 操作
vector :: iterator iter = ivec.begin()
vector :: iterator iter = ivec.end()
1.3 迭代器的自增和解引用運算
*iter = 0;
1.4 迭代器的遍歷容器
for (vector
:: iterator iter = ivec.begin(); iter != ivec.end(); ++iter)
1.5 const_iterator
每種容器型別還定義了一種名為const_iterator的型別,該型別只能用於讀取容器的元素,不能進行修改
當我們隊普通的 iterator 型別進行解引用時,得到某個元素的非const,而如果我們對const_iterator型別進行解引用時,則可以得到乙個指向const物件的引用。
1.5.1 區分const_iterator 和 const 的iterator
宣告乙個const迭代器時,必須初始化迭代器,一旦初始化,就不能改變
vecotr nums(10);
const vecotr::iterator cit = nums.egin();
*cit = 1; // 不能改變元素值
++cit;
1.6 增量操作符
iter + n 指標位置移動的偏移量
1.6 迭代器的失效stl定義了一組泛型的演算法,例如排序與搜尋,定義在algorithm.h
2.1 唯讀演算法
只會讀取某個範圍的元素,不會改變元素
vector
:: iterator iter = find(vec.begin, vec.end(), 20);
2.2修改容器元素的演算法// 將 vec.begin() ~ vec.begin()範圍內初始化為0
fill(vec.begin(), vec.end(), 0)
2.3 重排容器元素的演算法sort(vec.begin(), vec.end())
2.4 向演算法傳遞函式bool ishorter(int a, intb)
sort(vec.begin(), vec.end(), ishorter)
C 迭代器(STL迭代器)iterator詳解
要訪問順序容器和關聯容器中的元素,需要通過 迭代器 iterator 進行,迭代器是乙個變數,相當於容器和操作容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標型別。迭代器按照定義方式分為以下四種 正向迭代器,定義方式 容器類名 it...
C 筆記 STL 迭代器失效
今天同事在碼碼時遇到這麼乙個問題 這段 報錯 for qmap iterator it m projectinfos.begin it m projectinfos.end it 邏輯很簡單,遍歷map,滿足條件就刪除迭代器當前指向的元素。但是迭代器失效了,所以在 it時會報錯。序列容器 對序列容器...
STL 鍊錶和迭代器
include include include include include include include include 迭代器 空間配置器 using namespace std 鍊錶實現 namespace my 構造 template class t1,class t2 void con...