迭代器(iterator):
(1) 迭代器是一種資料形態,其意義為記憶空間位址,使用方法如指標。向量可使用迭代器來呼叫其元素,如:
vector<int> a; //建構整數向量a
vector<int>::iterator h; //宣告一整數向量迭代器h
for(int i=0;i<10;i++){
a.push_back(i);}
for( h=a.begin();h!=a.end();h++){
cout<<*h;} //顯示0123456789
cout<<endl<<*(h-1); //顯示9
cout<<endl<<*(h-2); //顯示8
cout<<endl<<*(h-3); //顯示7
註一:a.begin()是記憶空間位址,表示向量a首位元素的記憶空間位址。a.end()也是記憶空間位址,表示向量a末位元素的下一個記憶空間位址。
註二:h也是記憶空間位址,*h表示此記憶空間所指的資料。
註三:h++表示h跳到下一個元素的記憶空間位址。
(2) 上述所言的迭代器乃是正向迭代器,順序由前到後。還有一種迭代器為逆向迭代器,順序由後到前。正向迭代器和逆向迭代器為不同的資料形態。
int tt[]={1,2,3,4,5}; //宣告整數矩陣tt
vector<int> a(tt,tt+5); //將tt的第一個元素到第五個元素複製給整數向量a
vector<int>::reverse_iterator i; //宣告整數向量逆向迭代器i
for(i=a.rbegin();i!=a.rend();i++){
cout<<*i;} //顯示54321
註一:a.rbegin()是記憶空間位址,表示向量a首位元素的前一個記憶空間位址。a.rend()也是記憶空間位址,表示向量a末位元素的記憶空間位址。
圖示:此乃向量a,灰色代表有元素占據的記憶空間,白色則為空白空間。
註二:i++表示i跳到下一個記憶空間位址,因是逆向迭代器,故位址應為前一個元素。
(3) 所謂的常數迭代器,宣告方式例如:vector<int>::const_iterator I;。其功用與一般迭代器幾乎相同,惟一不同者在於:常數迭代器僅只能對容器中資料進行「讀取」的動作,而無法存入或更改其值。也需注意,我們無法將常數迭代器的值指派給其他迭代器,沒事少用常數迭代器。
留言列表