11.2 初窺演算法
使用泛型演算法必須包含algorithm標頭檔案。
標準庫還定義了一組泛化的算術演算法(generalized numeric algorithm),其命名習慣與泛型演算法相同。使用這些演算法則必須包含numeric標頭檔案。
11.2.1 唯讀演算法
vectorvec;
for(int i = 0; i != 10; ++i)
int sum = accumulate(vec.begin(),vec.end(),0);
cout << sum << endl;
用於指定累加值的第三個實參是必要的,因為accumulate對將要累加的元素型別一無所知,因此,除此之外,沒有別的辦法建立合適的起始值或者關聯的型別。
可以使用accumulate把string型的vector容器中的元素連線起來。
vectorvec;
vec.push_back("anders");
vec.push_back(" ");
vec.push_back("fan");
string sum = accumulate(vec.begin(),vec.end(),string(""));
cout << sum << endl;
find_first_of的使用
find_first_of函式帶有兩個迭代器引數標記兩段元素範圍,在第一段範圍內查詢與第二段範圍中任意元素匹配的元素,然後返回乙個迭代器,指向第乙個匹配的元素。如果找不到匹配元素,則返回第乙個範圍的end迭代器。
vectorvec;
vec.push_back("anders");
vec.push_back("alex");
vec.push_back("fan");
vec.push_back("joice");
vectorvec2;
vec2.push_back("alex");
vec2.push_back("joice");
vec2.push_back("fan");
vec2.push_back("linda");
int num = 0;
vector::iterator it = vec.begin();
while(it!=vec.end())
cout << num << endl;
return 0;
泛型演算法都是在標記(或其他序列)內的元素範圍的迭代器上操作的,標記範圍的兩個實參型別必須精確匹配必須精確匹配,而迭代器本身必須標記乙個範圍:它們必須指向同乙個容器中的元素(或者超出容器末端的下一位置),而且如果兩者不相等,則第乙個迭代器通過不斷地自增,必須可以到達第二個迭代器。
有些演算法,例如find_first_of,帶有兩對迭代器引數。每對迭代器中,兩個實參的型別必須精確匹配,但不要求兩對之間的型別匹配。特別是,元素可儲存在不同型別的容器中,只要這兩個序列的元素可以比較即可。
第11章 泛型演算法
泛型演算法本身從不執行容器操作,只是單獨依賴迭代器和迭代器操作實現。演算法從不直接新增或刪除元素。back inserter函式是迭代器介面卡,迭代器介面卡使用乙個物件作為實參,並生成乙個適應其實參行為的新物件。謂詞是做某些檢測的函式,返回用於條件判斷的型別,指出條件是否成立。三種插入迭代器的區別在...
第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...
第11章 泛型演算法 5
11.3 再談迭代器 1 插入迭代器 insert iterator 這類迭代器與容器繫結在一起,實現在容器中插入元素的功能。2 iostream迭代器 iostream iterator 這類迭代器可與輸入或輸出繫結在一起,用於迭代遍歷所關聯的io流。3 反向迭代器 reverse iterato...