C 迭代器iterator 小結

2021-10-06 04:51:43 字數 1599 閱讀 5359

容器與其迭代器功能

迭代器的輔助函式

之前對c++中的iterator一直只有比較籠統的認識,由python中的迭代器知識所擬出來的淺薄印象,今天重新整理一遍,對研究有關vector等可迭代容器的題有所幫助。

參考文章:

c語言中文網

ceeji部落格

除了在其它語言中司空見慣的下標法訪問容器元素之外,c++ 語言提供了一種全新的方法——迭代器(iterator)來訪問容器的元素。迭代器其實類似於引用,指向容器中某一元素。迭代器助於統一各類容器的隨機訪問介面,因為很多容器無法用下標訪問(vector[i])。

要訪問順序容器和關聯容器中的元素,需要通過「迭代器(iterator)」進行。迭代器是乙個變數,相當於容器和操縱容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標類似。

按照功能的定義:

正向迭代器:容器類名::iterator 迭代器名;

常量正向迭代器:容器類名::const_iterator 迭代器名;(不能修改其指向的元素,可以改變指向

反向迭代器:容器類名::reverse_iterator 迭代器名;(++操作向前讀取)

反向常量迭代器:容器類名::const_reverse_iterator 迭代器名;(顧名思義)

雙向迭代器:組合正向迭代器和逆向迭代器的功能,支援多遍演算法

隨機訪問迭代器:組合雙向迭代器的功能與直接訪問容器中任何元素的功能,即可向前向後跳過任意個元素。支援it1 < it2,即判斷p1 在p2之前(同<=;>;>=)

遍歷vector**示例

vectorv; //已經初始化

vector::iterator i; //定義正向迭代器

i = v.begin();

i += 5;

cout << *i << endl; //輸出第五個元素

for (i = v.begin(); i != v.end(); ++i)

vector:隨機訪問

deque:隨機訪問

list:雙向

set/multiset:雙向

map/multimap:雙向

stack:不支援迭代器

queue:不支援迭代器

priority_queue:不支援迭代器

advance(p,n):使迭代器p向前或向後移動n個元素

distance(p,q):計算兩個迭代器之間的距離,即迭代器p經過多少次++操作後和迭代器q相等,如果呼叫時p已經指向q的後面,則該函式會陷入死迴圈

iter_swap(p,q):用於交換兩個迭代器p,q指向的值

C 迭代器(Iterator)詳解

迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間費連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器 i...

C 迭代器(Iterator)詳解

1 迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器...

C 迭代器Iterator詳解

用處 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別,提供了對乙個容器中物件的訪問方法 每種容器型別都定義了自己的迭代器型別,如vector vector int i...