第11章 泛型演算法 5

2021-06-02 07:40:47 字數 1494 閱讀 9039

11.3 再談迭代器

(1)插入迭代器(insert iterator):這類迭代器與容器繫結在一起,實現在容器中插入元素的功能。

(2)iostream迭代器(iostream iterator):這類迭代器可與輸入或輸出繫結在一起,用於迭代遍歷所關聯的io流。

(3)反向迭代器(reverse iterator):這類迭代器實現向後遍歷,而不是向前遍歷。所有容器型別都定義了自己的reverse_iterator型別,由rbegin和rend成員函式返回。

11.3.1 插入迭代器

back_inserter函式是一種插入器。插入器是一種迭代器介面卡,帶有乙個容器引數,並生成乙個迭代器,用於在指定容器中插入元素。通過插入迭代器賦值時,迭代器將會插入乙個新的元素。c++語言提供了三種插入器,其差別在於插入元素的位置不同。

(1)back_inserter,建立使用push_back實現插入的迭代器。

(2)front_inserter,建立使用push_front實現插入。

(3)inserter,使用insert實現插入操作。除了所關聯的容器外,inserter還帶有第二個實參:指向插入起始位置的迭代器。

1.front_inserter需要使用push_front

front_inserter的操作類似與back_inserter:該函式將建立乙個迭代器,呼叫它所關聯的基礎容器的push_front成員函式代替賦值操作。

只有當容器提供push_front操作時,才能使用front_inserter.在vector或其他沒有push_front運算的容器上使用front_inserter,將產生錯誤。

2.inserter將產生在指定位置實現插入的迭代器

listlist1;

list1.push_back("anders");

list1.push_back("alex");

list1.push_back("fan");

list1.push_back("joice");

list1.push_back("joice");

list1.push_back("amanda");

list1.push_back("amanda");

list1.push_back("amanda");

listlist2;

replace_copy(list1.begin(),list1.end(),inserter(list2,list2.begin()),string("amanda"), string("shari"));

for(list::iterator i = list2.begin();i!=list2.end();++i)

inserter的行為與front_inserter的有很大的差別。在使用front_inserter時,元素始終在容器的第乙個元素前面插入。而使用inserter時,元素則在指定位置前面插入。即使此指定位置初始化為容器中的第乙個元素,但是,一旦在該位置前插入乙個新元素後,插入位置就不再是容器的首元素了。

第11章 泛型演算法

泛型演算法本身從不執行容器操作,只是單獨依賴迭代器和迭代器操作實現。演算法從不直接新增或刪除元素。back inserter函式是迭代器介面卡,迭代器介面卡使用乙個物件作為實參,並生成乙個適應其實參行為的新物件。謂詞是做某些檢測的函式,返回用於條件判斷的型別,指出條件是否成立。三種插入迭代器的區別在...

第11章 泛型演算法 2

11.2 初窺演算法 使用泛型演算法必須包含algorithm標頭檔案。標準庫還定義了一組泛化的算術演算法 generalized numeric algorithm 其命名習慣與泛型演算法相同。使用這些演算法則必須包含numeric標頭檔案。11.2.1 唯讀演算法 vectorvec for i...

第11章 泛型演算法 4

11.2.3 對容器元素重新排序的演算法 stdafx.h include using namespace std bool isshorter const string s1,const string s2 bool gt6 const string s stdafx.cpp include st...