用處:指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。
定義:迭代器是一種檢查容器內元素並遍歷元素的資料型別,提供了對乙個容器中物件的訪問方法(每種容器型別都定義了自己的迭代器型別,如vector:vector< int>:: iterator iter;
),並且定義了容器中物件的範圍。
每個容器都定義了自己的迭代器,下面例子中即為vector及其迭代器應用(其他容器的迭代器用法見部落格:c++:各個容器中迭代器的用法)
#include
#include
using namespace std;
intmain()
// 顯示 vec 擴充套件後的大小
cout <<
"extended vector size = "
<< vec.
size()
<< endl;
// 訪問向量中的 5 個值
for(i =
0; i <
5; i++
)// 使用迭代器 iterator 訪問值
vector<
int>
::iterator v = vec.
begin()
;while
( v != vec.
end())
return0;
}
input iterators(輸入):通過對輸入迭代器解除引用(類似於指標*iter
)。最嚴格的輸入迭代只能以唯讀方式訪問物件,且只能讀取一次,通常發生在標準輸入裝置(鍵盤)讀取資料時。例如:istream。注意:只能單步向前,也就是說只可以遞增。output iterators(輸出):與 input iterators相似,但只是解除引用讓程式可以修改容器的值*iter=value
,不能讀取,且只能寫入一次,通常發生在向標準輸出裝置(印表機或螢幕)寫入資料時。也屬於單步向前迭代器。
forward iterators(正向):可讀可寫,單步向前。
bidirectional iterators(雙向):forward iterators+單步向後。
random access iterators(隨機訪問):集合上述所有迭代器功能,可以像指標一樣進行算術計算。 型別
可用操作列表
input :向前遍歷,唯讀,只能讀取元素一次
*iter: 唯讀訪問對應的元素
iter->member: 唯讀訪問對應元素的成員
++iter: 向前遍歷一步(返回最新的位置)
iter++: 向前遍歷一步(返回原先的位置)
iter1 == iter2: 判斷兩個迭代器是否相等
iter1 != iter2:判斷兩個迭代器是否不等
type(iter): 複製迭代器
output:向前遍歷,只寫,只能寫入元素一次
*iter = value: 向對應的元素寫入新值
++iter: 向前遍歷一步(返回最新的位置)
iter++: 向前遍歷一步(返回原先的位置)
type(iter): 複製迭代器
forward :逐個元素向前,可讀可寫,可訪問元素多次
*iter:; iter->member; ++iter; iter++; iter1 == iter2; iter1 != iter2; type(); type(iter); iter1 = iter2
bidirectional:逐元素向前/向後
++iter; iter++;
random access
bidirectional iterator所有能力特徵
iter[n]: 直接訪問索引為n的元素
iter+=n: 向前或向後(n為負數)遍歷n個元素
iter-=n: 先後或向前(n為負數)遍歷n個元素
iter+n(n+iter): 返回當前位置後面第n個元素的iterator位置
iter-n: 返回當前位置前面第n個元素的iterator位置
iter1-iter2: 返回iter1和iter2之間的距離(distance)
iter1iter1>iter2: 判斷iter1是否在iter2之後
iter1<=iter2: 判斷iter1是否不再iter2之後
iter1>=iter2: 判斷iter1是否不再iter2之前
output iterator寫入資料時,不檢查是否已到達結尾;
forward iterator必須保證訪問元素的有效性;
C 迭代器(Iterator)詳解
迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間費連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器 i...
C 迭代器(Iterator)詳解
1 迭代器 iterator 的介紹 背景 指標可以用來遍歷儲存空間連續的資料結構,但是對於儲存空間非連續的,就需要尋找乙個行為類似指標的類,來對非陣列的資料結構進行遍歷。定義 迭代器是一種檢查容器內元素並遍歷元素的資料型別。迭代器提供對乙個容器中的物件的訪問方法,並且定義了容器中物件的範圍。迭代器...
C 迭代器iterator詳解
目錄 程式設計客棧要訪問順序容器和關聯容器中的元素,需要通過 迭代器 iterator 進行。迭代器是乙個變數,相當於容器和操縱容器的演算法之間的中介。迭代器可以指向容器中的某個元素,通過迭代器就可以讀寫它指向的元素。從這一點上看,迭代器和指標類似。迭代器按照定義方式分成以下四種。定義 容器類名 i...