C 的迭代器

2021-08-07 11:34:25 字數 2067 閱讀 9638

迭代器是c++標準庫中的重要元件,特別是在容器內部,沒有迭代器,容器也就無所謂存在了。

例如:vector容器簡而言之就是3個迭代器 start finish 以及end_of_storage vector的任何操作都離不開這3個迭代器。。

接下來,總結一下c++ 中的迭代器的操作。

c++的迭代器分為5類,依次為 : input_iterator, output_iterator, forwrd_iterator, bidirectional_iterator 以及  random_access_iterator

訪問的級別由低到高,

下面的相應的模板函式的引數是以  「可進行該操作的最小迭代器型別」為基礎的。

函式 advance:

template void advance (inputiterator& it, distance n);
迭代器前進 n 個距離。如果是隨機迭代器,直接 +n ,否則使用 ++ 操作移動。

使用方法:

list::iterator it = mylist.begin();

advance (it, 5);

函式distance:

templatetypename iterator_traits::difference_type

distance (inputiterator first, inputiterator last);

求的是迭代器first與last間 的元素的個數,如果是隨機迭代器,直接使用 operator- 就好了,否則就要連續呼叫operator++操作符。

用法:vectorc++11

vector::iterator it = lower_bound(a.begin(), a.end(), 4);

distance(a.begin(), it); 

begin 和 end:等價於容器中的begin與end。

比如下述遍歷vector的方式:

vectora  = ;

for(auto it = a.begin(), it != a.end();  ++it) 

cout << *it << 」 」 ;

cout << endl;

等價於:

for(auto it = begin(a), it != end(a);  ++it) 

cout << *it << 」 」 ;

cout << endl;

prev函式:返回迭代器的前n個位置的迭代器

template bidirectionaliterator prev (bidirectionaliterator it,

typename iterator_traits::difference_type n = 1);

例如要返回上述vector的最後乙個元素:

cout  << prev(a.end() )  << endl;

要返回上述vector的倒數第3個元素:

cout  << prev(a.end() , 3)  << endl;

next函式:返回迭代器的後n個位置的迭代器:

template forwarditerator next (forwarditerator it,

typename iterator_traits::difference_type n = 1);

例如要返回上述vector的第二個元素

cout  << next(a.begin())  << endl;

第k個元素:

cout << next(a.begin(), k-1) << endl;

上述函式中,後四個函式是c++11新新增的函式。

C 迭代器之 反向迭代器

反向迭代器 reverse iterator 是普通迭代器的介面卡,通過重新定義自增和自減操作,以達到按反序遍歷元素的目的。如果在標準演算法庫中用反向迭代器來代替普通的迭代器,那麼執行結果與正常情況下相反。除此之外,其用法與普通迭代器完全一樣,我們不作詳細討論。這裡主要討論的是反向迭代器的乙個很特殊...

C 迭代器 迭代器失效問題

問題描述 輸入乙個整數陣列,實現乙個函式來調整該陣列中數字的順序,使得所有的奇數字於陣列的前半部分,所有的偶數字於位於陣列的後半部分,並保證奇數和奇數,偶數和偶數之間的相對位置不變。這是劍指offer上的一道經典習題,我們首先可以想到的解決方案是 再建立乙個臨時陣列把偶數先存放起來,然後把臨時空間的...

C 迭代器的失效

迭代器 iterator 是乙個可以對其執行類似指標的操作 如 解除引用 operator 和遞增 operator 的物件,我們可以將它理解成為乙個指標。但它又不是我們所謂普通的指標,我們可以稱之為廣義指標,你可以通過sizeof vector iterator 來檢視,所佔記憶體並不是4個位元組...