STL學習之迭代器

2021-10-07 15:06:43 字數 1862 閱讀 4231

迭代器提供了順序訪問容器中每個元素的方法。迭代器可以使用"++"運算子獲得下乙個元素的迭代器,可以使用" * "運算子訪問當前迭代器所指向的元素。如果元素型別是結構體或類,還可以使用「 ->」 運算子直接訪問該元素的乙個成員。以下是個人在學習迭代器時獲得得一些見解。

輸入流迭代器用來從乙個輸入流中連續地輸入某種型別的資料,它是乙個類模板,例如:

template istream_iterator;

t是資料型別,需要滿足兩個條件:有預設建構函式、可以使用「>>「運算子輸入。

注意:輸入流迭代器只適用那些只需遍歷一次的演算法

輸出流迭代器用來向乙個輸出流出流中連續輸出某種型別的資料,他也是乙個模板,例如:

template ostream_iterator;

t是資料型別,需要滿足兩個條件:有預設建構函式、可以使用「<

//從標準輸入讀入幾個實數,分別將他們的平方輸出

#include#include#include#include#includeusing namespace std;

//求平方的函式

double square(double x)

int main()

定義:輸入迭代器可以用來從序列中讀取資料,但是不一定能夠向其中輸入資料。輸入流迭代器支援對序列進行單向遍歷。

除了迭代器通用功能外,它還具備:

(1)、p1==p2 兩個輸入迭代器可以用"=="比較是否相同

(2)、p1!=p2 兩個輸入迭代器可以用"=="比較是否不同

(3)、*p 取得迭代器所指向元素的值

(4)、p1->m 資料是結構體或類時,取得迭代器所指元素的值

前面提到的輸入流迭代器就是一種典型的輸入迭代器。

輸入迭代器具有不確定性:p1= =p2不能保證 ++p1= =++p2,更不能確定*(p1++)= =*(p2++)。

定義:輸出迭代器可以用來向序列中寫入資料,但是不一定能夠從其中讀出資料。輸出流迭代器支援對序列進行單向遍歷。

除了迭代器通用功能外,它還具備:

*p1 = t 向迭代器所指向位置寫入乙個元素,返回型別是不確定的

前面提到的輸出流迭代器就是一種典型的輸出迭代器。

輸迭代器具有不確定性:如果兩次自增之間沒有寫入元素,或者兩次連續使用"*p1=t"這樣的語法寫入元素而沒有自增,這兩種行為都是不確定的。

前向迭代器既支援資料讀入也支援寫入資料。

前向迭代器支援支援對序列進行可重複的單向遍歷。

前向迭代器去除了輸入迭代器和輸出迭代器的不確定性。

重點說一下,去掉不確定性之後意味著若p1 = = p2,則 ++p1 = = ++p2 一定成立

雙向迭代器除了前向迭代器的功能之外還支援反向移動,即支援自減,如 - - p1

隨機迭代器在雙向迭代器的基礎上,它又支援將迭代器向前或向後移動n個元素,因此隨機訪問迭代器的功能幾乎和指標一樣。

隨機訪問迭代器的一些功能:

(1)p1+=n 迭代器向前移動n個元素

(2)p1-=n 迭代器向後移動n個元素

(3)p1+n 獲得指向迭代器p1前第n個元素的迭代器

(4)p1-n 獲得指向迭代器p1後第n個元素的迭代器

(5)p1[n] 等價於*(p1+n)

以上是本人2020-6-29學習迭代器所得。

STL之迭代器

除了為每個容器定義的迭代器之外,標準庫在標頭檔案iterator中還定義了額外幾種迭代器,包括 1 插入迭代器 insert iterator 被繫結到乙個容器上,可用來向容器插入元素。2 流迭代器 stream iterator 被繫結到輸入輸出流,可用來遍歷所關聯的io流。3 反向迭代器 rev...

STL之迭代器

我們知道,迭代器常用來訪問容器中的元素。在使用迭代器的方式上來看,和指標非常的類似,甚至於就已經當作指標來使用了。事實上,迭代器的作用就是為了提供一種訪問資料的方式。容器 container 作為標準模板庫中的乙個核心內容,給我們提供了非常強大的資料結構的支援,以便於我們能夠更加方便 高效的實現我們...

STL之迭代器

1 每一種容器都有自己的迭代器 2 所有的迭代器介面都是一樣的 3 在整個標準庫中,經常使用形參為一對迭代器的建構函式 4 常用的迭代器操作 iter iter iter iter1 iter2,iter1 iter2 5 vector和deque容器的迭代器的額外操作 iter n,iter n,...