迭代器是什麼

2021-06-02 20:11:15 字數 1994 閱讀 9882

**:

在學習c++ stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個十分簡陋的vector類:

view plain

template

<

class

t>  

class

vector   

t* begin()   

void

insert(t d)  

typedef

t* iterator; 

//vector的迭代器就是基礎指標型別

};  

我們知道,vector是陣列實現的,也就是說,只要知道陣列的首位址,就能知道後面每個元素的位置,所以,訪問vector的迭代器,其實就是乙個基礎的指標型別,我們可以通過++,--等操作,來遍歷訪問該vector。

view plain

//測試vector

vector> a;  

a.insert(1);  

a.insert(2);  

vector>::iterator itra;  

itra = a.begin();  

printf("%d/n"

, *itra);   

itra++;  

printf("%d/n"

, *itra);  

itra--; //基礎指標型別都支援++,--,+,-等操作符

printf("%d/n"

, *itra);  

哇~~,原來vector的迭代器那麼簡單,那麼,我們來考慮一下list,這是鍊錶,我們知道,鍊錶每個元素都儲存在不同的位置,我們一般通過指向下乙個元素的next指標來找到下乙個元素。那麼,我們怎麼樣來設計乙個迭代器,然後可以直接對這個迭代器進行++,--等操作二遍歷訪問整個鍊錶呢:

view plain

template

<

class

t>  

class

list;  

node* pbegin; //表頭

class

list_iterator  

void

operator ++ ()   

// ...還可以過載-- + -等操作符

t operator * ()  

};  

public

:  list()   

node* begin()   

void

insert(t d)   

typedef

list_iterator iterator; 

//list的迭代器是乙個類

};  

為list設計的迭代器是乙個類,這個類支援++操作來向後移動遍歷鍊錶:

view plain

/測試list  

list> b;  

b.insert(1);  

b.insert(2);  

list>::iterator itrb;  

itrb = b.begin();  

printf("%d/n"

, *itrb);  

itrb++; // 該迭代器只支援++

printf("%d/n"

, *itrb);  

通過這兩個例子,可以看出,迭代器是跟容器緊密結合的,不同的容器,它的迭代器不同,但是,他們有共同的目標,就是可以通過該迭代器,來遍歷訪問這個容器裡面的元素。這樣帶來的好處是在stl設計演算法時,可以脫離容器而設計更加通用的演算法。比如,在容器中查詢乙個元素。查詢,這個操作一般來說就是遍歷整個集合,然後找到那個要找的元素,但是,如果沒有迭代器,我們需要為vector和list設計兩個查詢演算法,因為找下乙個元素在vector和list中的操作不同。同樣的思想卻要兩套**,顯然這是不優秀的。

有了模板,我們可以將演算法和特定的資料分離開來,而有了迭代器,我們可以將演算法和特定的容器分離開來。

迭代器是什麼

分類 c c 2010 05 07 16 06 1877人閱讀收藏 舉報iterator vector list 演算法insert class 在學習c stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個...

迭代器是什麼

在學習c stl的時候,整天碰到迭代器,也整天用,但是,到底它是個什麼東西,很多人沒有乙個認識。這裡我通過幾個小的demo,來看看迭代器。首先我實現了乙個十分簡陋的vector類 template class t class vector t begin void insert t d typede...

C 程式設計中迭代器是什麼

c 中迭代器 iterator 是一種物件,它能夠用來遍歷標準模板庫容器中的部分或全部元素,每個迭代器物件代表容器中的確定的位址。迭代器修改了常規指標的介面,所謂迭代器是一種概念上的抽象 那些行為上像迭代器的東西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用演算法有機的統一起來...