第11章 泛型演算法 7

2021-06-02 09:07:50 字數 903 閱讀 5196

11.3.3 反向迭代器

容器還定義了rbegin和rend成員,分別返回指向容器尾元素和首元素前一位置的反向迭代器。與普通迭代器一樣,反向迭代器也有常量(const)和非常量(noconst)型別。

vectorvec;

for(int i = 0; i != 10; ++i)

for(vector::reverse_iterator rbegin = vec.rbegin(); rbegin != vec.rend(); ++rbegin)

1. 反向迭代器需要使用自減操作符

從乙個既支援--也支援++的迭代器就可以定義反向迭代器。但是流迭代器卻不然,由於不能反向遍歷流,因此流迭代器不能建立反向迭代器。

2. 反向迭代器與其他迭代器之間的關係

string line = "123,345,567";

string::iterator i = find(line.begin(), line.end(), ',');

cout << string(line.begin(), i) << endl; //123

string::reverse_iterator ri = find(line.rbegin(), line.rend(), ',');

cout << string(line.rbegin(), ri) << endl; //765

cout << string(ri.base(), line.end()) << endl; //567

所有反向迭代器都提供成員函式base以轉換成一般的迭代器。

反向迭代器用於表示範圍,而表示的範圍是不對稱的,這個事實可推導出乙個重要的結論:使用普通的迭代器對反向迭代器進行初始化或賦值時,所得到的迭代器並不是指向原迭代器所指向的元素。

第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...