容器與其迭代器功能
迭代器的輔助函式
之前對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...