第11章 泛型演算法 2

2021-06-02 07:15:34 字數 1486 閱讀 5290

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