C 學習筆記(二) 迭代器

2021-06-23 04:24:37 字數 2372 閱讀 8095

迭代器:

每種容器都提供了若干共同工作的迭代器型別,與容器型別一樣,所有迭代器都具有相同的介面, 即它們都支援某種操作

支援的操作有:

*iter                  指向元素

iter->mem          解引用

++iter iter++       自增

--iter iter--          自減

iter1==iter2        判斷相等

iter !=iter2          判斷不等

vector 和  deque 容器的迭代器提供額外的運算

它們支援的操作有:

iter+n            迭代器加整數值, 這個含義表示,迭代器的位址相加,n表示iter所指向元素之後的第n個元素, 類似的還有

iter-n            

iter1 += iter2

iter1 -= iter2

iter1-iter2

>, >=, <, <=

關係操作符,只適用於vector和deque容器, 這是因為只有這兩種容器為其元素提供快速隨機的訪問。

迭代器的範圍:

c++語言使用一對迭代器標記迭代器範圍, 這兩個迭代器分別指向同乙個容器中的兩個元素或超出末端的下一位置, 通常它們被命名為first和last, 或beg和end

對於 後乙個迭代器, last或end, 它從來都不是指向容器的最後乙個元素,而是指向最後乙個元素的下乙個位置。 

迭代器從  first開始,直到遇到last停止,可以訪問這之間所有的元素。

此類元素範圍稱為

左閉合區間

使用左閉合區間的程式設計意義:

保證了容器元素非空, 指向第乙個元素,

保證了當first==last時 迭代器退出

順序容器操作:

每種順序容器都提供了一組有用的型別定義以及以下操作:

在容器中新增元素

在容器中刪除元素

設定容器大小

獲取容器內第乙個和最後乙個元素

介紹容器定義的型別別名:

size_type                      無符號整形, 足以儲存此容器型別的最大可能容器長度

iterator                         此容器型別的迭代器型別

const_iterator                元素的唯讀迭代器型別

reverse_iterator            按逆序定址元素的迭代器

const_reverse_iterator    元素唯讀逆序迭代器

difference_type              足夠儲存兩個迭代器差值的有符號整形, 可為負數

value_type                     元素型別

reference                     元素的左值型別, 是value_type&的同義詞

const_reference            元素常量的左值型別

begin和end成員

c.begin()     返回乙個迭代器, 它指向容器c的第乙個元素

c.end()       返回乙個迭代器, 它指向容器c的最後乙個元素的下乙個位置

c.rbegin()  和 c.rend()是逆序操作的

上述每個操作  都有兩套定義, 乙個是返回給常量迭代器,乙個是普通迭代器

在順序容器中新增元素:  push_back

所有順序容器都支援push_back操作, 提供在容器尾部插入乙個元素的功能

每次向 容器中新增乙個元素, 容器的長度自動增加一, 它是動態的

在順序容器中新增元素的操作:

c.push_back(t)       在容器c的尾部新增值為t的元素

c.push_front(t)      在容器c的前端新增值為t的元素。

c.insert(p, t)          在迭代器p所指向的元素前面插入值為t的新元素,並返回指向新新增元素的迭代器

c.insert(p, n, t)      就是插入n個值

c.insert(p, b, e)      就是在迭代器所指向的元素前面插入 迭代器b到迭代器e之間範圍的元素。

除了push_back運算, list和deque容器型別還提供了類似的操作:push_front。 這個操作實現在容器首部插入新元素的功能。

新增元素 可能導致迭代器失效

避免操作由end操作返回的迭代器

vector::iterator first=v.begin(), last=v.end();

while(first != last)

因此,應該改為如下**:

while(first != v.end())

C 迭代器學習筆記

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

C 學習筆記 迭代器

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

c 學習筆記之迭代器

vector迭代器持續有效,除非 1.使用著在較小的索引位置插入或者刪除元素。2.由於容量的變化引起的記憶體重新分配。list迭代器失效 1.將it指向的元素刪除,那麼it則失效 2.用erase刪除元素記得接收返回值,同時最好使用while迴圈。順序容器用乙個容器去初始化另乙個容器,以及用迭代器範...