C 迭代器學習

2022-09-07 17:54:17 字數 1534 閱讀 4453

《c++ 程式設計》

迭代器是一種檢查容器內元素並遍歷元素的資料型別。c++更趨向於使用迭代器而不是下標操作,因為標準庫為每一種標準容器(如vector)定義了一種迭代器型別,而只用少數容器(如vector)支援下標操作訪問容器元素。

迭代器實現:

迭代器的作用就是提供乙個遍歷容器內部所有元素的介面,因此迭代器的內部必須儲存乙個與容器相關聯的指標,然後過載各種運算操作來方便遍歷,其中最重要的就是∗

'>∗

運 算符和->運算子,以及++,–等可能需要的運算子過載。實際上這和c++標準庫中的智慧型指標(smart pointer)很像,智慧型指標也是將乙個指標封裝,然後通過引用計數或是其它方法完成自動釋放記憶體的功能,為了達到和原有指標一樣的功能,也需要 對*,->等運算子進行過載,下面參照智慧型指標實現了乙個簡單vector的迭代器,其中幾個typedef暫時不用管,我們後面會提到。 veciter主要作用就是包裹乙個指標,不同容器內部資料結構不相同,因此迭代器操作符過載的實現也會不同。比如++操作符,對於線性分配記憶體的陣列來 說,直接對指標執行++操作即可,但是如果容器是list就需要採用元素內部的方法,比如ptr->next()之類的方法訪問下乙個元素。因 此,stl容器都實現了自己的專屬迭代器。

const_iterator迭代器:

每種容器還定義了一種名為const_iterator的型別。該型別的迭代器只能讀取容器中的元素,不能用於改變其值。之前的例子中,普通的 迭代器可以對容器中的元素進行解引用並修改,而const_iterator型別的迭代器只能用於讀不能進行重寫。例如可以進行如下操作:

for(vector::const_iterator iter=ivec.begin();iter!=ivec.end();++iter)

cout<<*iterfor(vector::const_iterator iter=ivec.begin();iter!=ivec.end();++iter)

*iter=0; //不合法,不能進行寫操作

const_iterator和const  iterator是不一樣的,後者對迭代器進行宣告時,必須對迭代器進行初始化,並且一旦初始化後就不能修改其值。這有點像常量指標和指標常量的關係。例如:

vector    ivec(10

);const vector::iterator iter=ivec.begin();

*iter=0; //

合法,可以改變其指向的元素的值

++iter; //

不合法,無法改變其指向的位置

例項:

#include #include 

using

namespace

std;

intmain()

cout

for (vector::reverse_iterator j = v.rbegin(); j != v.rend(); ++j)

cout

<< *j << "";

return0;

}

C 迭代器學習筆記

1 istream iterator和ostream iterator的學習 istream iteratorin strm 其中表示輸入型別,strm為istream iterator指向的流 提供了輸入操作符 ostream iteratorout strm 輸出操作符 2.vector rev...

C 學習之迭代器

c 標準庫中的3個重要概念就是容器,迭代器,演算法,標準庫中的常用容器有vector,list,deque,map,set,multimap,multiset c 11中新增了array,forward list,unordered map,unordered set,unordered multi...

C 學習筆記 迭代器

我們都知道可以用下標運算來訪問string物件和vector物件。而另外還有一種更通用的方法也可以實現這樣的方法。名曰 迭代器 iterator 類似於指標,迭代器也提供了對物件的間接訪問。就迭代器而言,其物件是容器中的元素或者string中的字元。使用迭代器可以訪問某個元素,迭代器也能從乙個元素移...