C 9 2迭代器支援的運算和迭代器範圍

2021-07-03 00:06:53 字數 1628 閱讀 3221

每種容器型別都提供若干共同工作的迭代器型別,與容器型別一樣,所有迭代器具有相同的介面:如果某種迭代器支援某種操作,那麼支援這種操作的其他迭代器會以相同的方式支援這種操作。例如:所有容器迭代器都支援以解引用運算從容器中讀入乙個元素。類似的,容器都提供自增和自減操作符來支援從乙個元素到下乙個元素的訪問。

::iterator iter = vec.begin() + vec.size()/2;//計算vector物件的中點位置

list

ilist(vec.begin(),vec.end());

ilist.begin()+ilist.size()/2;//錯誤!!!!!list迭代器不支援算術運算,也不支援關係運算。它只支援前置和後置的自增、自減運算以及相等(不相等)運算。

此類元素範圍稱為左閉合區間,其標準表達方式為:

[first,last)//表示從first開始,到last 結束,但不包括last 。迭代器last 可以等於first,或指向first 標記的元素後面的某個元素,但絕對不能指向first標記的元素前面的元素。
因為左閉合區間有兩個方便使用的性質,所以標準庫使用此類區間。

當first和last相等時,迭代器範圍為空;

不相等時,迭代器範圍內至少有乙個元素,而且first指向該區間的第乙個元素。

//定義乙個返回迭代器型別的函式,函式的形參是一對迭代器和乙個常數。

//函式實現的功能在是通過迭代器在容器中尋找某個數,並返回該迭代器的值

#include

#include

#include

#include

using

namespace

std;

vector

::iterator findint(vector

::iterator beg,vector

::iterator end,int ival)

int main()

; vector

ivec(ia,ia+7);//通過陣列對容器進行初始化

int ival;

cin>>ival;

vector

::iterator it;

it=findint(ivec.begin(),ivec.end(),ival);

if(it!=ivec.end())

cout

<

cout

<

0;}

//為了提高程式的通用性,使得對於不同型別的迭代器及元素型別,都能用同一查詢函式進行查詢。

//函式findint可以實現為函式模板。(16章)

template

t1 findint(t1 beg,t1,t2 ival)

9 2迭代器和迭代器範圍

vector和deque的迭代器間的減法操作 iter1 iter2 操作結果是兩個迭代器間的距離,difference type型別,可直接cout輸出。注意 只適用於vector和deque。同樣,迭代器加或減整數值n,也只適用於vector和deque。但是這兩個容器的迭代器間是否有 和 操作...

關於set和map迭代器支援的運算

問題 曾經想遍歷乙個set遍歷。當時是這樣寫的 set iterator b a.begin 1後來發現程式報錯。究其原因是,set迭代器不支援加減數操作。檢視了一下維基百科,下面是有關說明 1.所有迭代器都應該實現自增算符 iter iter 2.bidirectional迭代器 是在前向迭代器的...

迭代器和反向迭代器,常量迭代器和非常量迭代器

迭代器的型別共有4種 iiterator,const iterator,reverse iterator,const reverse iterator include include include include using namespace std int main include inclu...