46 C 基礎 STL迭代器和演算法介紹

2021-08-20 04:15:01 字數 1565 閱讀 7202

迭代器提供對乙個容器的物件的訪問方法。迭代器就如同乙個指標。事實上,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...