STL庫中迭代器 for each 函式用法

2021-10-03 15:55:03 字數 1125 閱讀 5514

1、迭代器iternator:廣義指標。

vector<

double

>

::iternator ptr;

begin():返回指向容器中第乙個元素的迭代器。

end():返回指向超過容器尾的迭代器。

使用超過容器尾的迭代器ptr!=abc.end()更方便遍歷。

vector<

double

> abc =

;for

(ptr = abc.

begin()

;ptr!=abc.

end(

);ptr++

)

迭代器區間為左閉右開,如[a,a+2)表示a與a+1指向的兩個值。

因此[abc.begin(),abc.end()]包含abc內所有值。

abc.

erase

(abc.

begin()

,abc.

begin()

+2);

2、for_each()函式引數:兩個迭代器,乙個處理函式

for

(ptr = abc.

begin()

;ptr!=abc.

end(

);ptr++

)

替換為:

for_each

(abc.

begin()

,ptr!=abc.

end(

),func)

;

不可改變容器內引數。

3、基於範圍的for迴圈

void

funv

(double

& x)

for(

auto

& x:abc)

可以改變容器內引數,需要傳入引用

1、迭代器end()指向超過容器尾,迭代器區間為左閉右開。

2、for_each()函式不可改變容器內引數。

3、基於範圍的for迴圈可以改變容器內引數。

STL中iterator迭代器

1 標頭檔案 所有容器有含有其各自的迭代器型別 iterator types 所以當你使用一般的容器迭代器時,並不需要含入專門的標頭檔案。不過有幾種特別的迭代器,例如逆向迭代器,被定義於中。2 迭代器型別 迭代器共分為五種,分別為 input iterator output iterator for...

STL中迭代器失效問題

對於vector deque等連續儲存的容器來說,插入元素 insert 或者刪除元素 erase 會導致後邊的迭代器都失效,解決方法是,erase iter 會返回下乙個有效迭代器的值,刪除元素時用將當前迭代器賦值為erase的返回值,系統會自動將迭代器的指向修改的。for iter cont.b...

STL中的迭代器分類

五類迭代器如下 1 輸入迭代器 唯讀,一次傳遞 為輸入迭代器預定義實現只有istream iterator和istreambuf iterator,用於從乙個輸入流istream中讀取。乙個輸入迭代器僅能對它所選擇的每個元素進行一次解析,它們只能向前移動。乙個專門的建構函式定義了超越末尾的值。總是,...