close

按此前往C++完整教學目錄

 

 

迭代器(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,灰色代表有元素占據的記憶空間,白色則為空白空間。

image

註二:i++表示i跳到下一個記憶空間位址,因是逆向迭代器,故位址應為前一個元素。

(3) 所謂的常數迭代器,宣告方式例如:vector<int>::const_iterator I;。其功用與一般迭代器幾乎相同,惟一不同者在於:常數迭代器僅只能對容器中資料進行「讀取」的動作,而無法存入或更改其值。也需注意,我們無法將常數迭代器的值指派給其他迭代器,沒事少用常數迭代器。

 

 

上一篇:向量的操作

下一篇:向量的複製

arrow
arrow
    創作者介紹
    創作者 埃伯 的頭像
    埃伯

    程式語言教學

    埃伯 發表在 痞客邦 留言(1) 人氣()