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

2021-10-13 18:33:38 字數 1336 閱讀 4395

迭代器的型別共有4種:::iiterator,::const_iterator,::reverse_iterator,::const_reverse_iterator

#include #include #include #include using namespace std;

int main()

#include #include #include #include using namespace std;

int main()

(5)如果是兩個迭代器比較的時候,只要只想同乙個元素,如果僅僅只有const的差別,那麼結果是相等的。

(6)反向迭代器和普通迭代器呼叫演算法的時候:

把普通迭代器初始化反向迭代器,最後得到一組反向迭代器範圍,那麼處理的範圍是一樣的,例如:

#include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std;

int main()

;ostream_iteratorout_iter(cout);

//那麼根據迭代器的左閉右開準則,給的範圍是3-8個,

//接下來把迭代器的3-8個元素轉變為反向迭代器it3和it4,

//(it4,it3)這個處理範圍對應3-8個範圍

//一句話:把一對普通迭代器轉換成反向迭代器,處理的範圍和原來迭代器範圍一樣

//執行結果是:76543

vector::reverse_iterator it3(vint.begin() + 2),it4(vint.begin() + 7);

copy(it4,it3,out_iter);

//反過來,把一對反向迭代器轉化成普通迭代器後,處理範圍會改變嗎?

vector::iterator i1 = it3.base(),i2 = it4.base();

copy(i1,i2,out_iter);

//執行結果是 34567

return 0;

}

(7)c++ primer(5th)365頁上說,從普通迭代器給反向迭代器賦值或者初始化,那麼得到的不是指向同乙個元素的迭代器,但是我在gcc version 9.3.0 (ubuntu 9.3.0-17ubuntu1~20.04) 上,不能用普通迭代器給反向迭代器賦值(這裡指等號賦值)。

而反向迭代器給普通迭代器賦值,必須通過反向迭代器的成員函式base()才能實現

迭代器 反向迭代器

c primer 中文版第四版 第273頁 9.3.2 begin和end成員 begin和end操作產生指向容器內第乙個元素和最後乙個元素的下乙個位置的迭代器,如下所示。這兩個迭代器通常用於標記包含容器中所有元素的迭代範圍。c.begin 返回乙個迭代器,它指向容器c的第乙個元素 c.end 返回...

C STL 前向迭代器和反向迭代器

include include using namespace std int main listlis test,test 9 list iterator it lis.begin int itemp 0 前向iterator cout normal data n for it lis.begin...

C 迭代器之 反向迭代器

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