10.1-10.2泛型算法
阿新 • • 發佈:2018-05-29
程序員 謂詞 pre init pen 正數 ide isp algorithm
//10 初識泛型算法 void genericAlgorithm() { //在輸入序列中查找特定元素0,如果找到該元素則返回指向它的叠代器(如果有多個則指向第一個),否則返回iVec.end() auto iter = find(iVec.begin(), iVec.end(), 0) //查找特定值個數的算法,在輸入序列中查找特定值 num 的個數,可以是string int counts = count(iVec.begin(), iVec.end(), num); //查找特定值個數的算法 int i = count_if(iVec.begin(), iVec.end(), [](intView Codenum) {return num < 0; }); //輸入序列求和,第三個參數 0 為初始值 int sum = accumulate(iVec.begin(), iVec.end(), 0); //equal 比較兩個序列 equal(iVec1.begin(), iVec1.end(), iVec2.begin()); //序列賦值,序列值全部賦值為0 fill(iVec.begin(), iVec.end(), 0); //序列賦值,序列前5個元素賦值為0,確保能容納下5個元素是程序員的責任 fill_n(iVec.begin(), 5, 0); //插入叠代器 vector<int> iVec; auto iter = back_inserter(iVec); //形參為vec的引用,返回值為與容器綁定的插入叠代器 iter = 2; //賦值時會調用push_back //copy算法,將輸入序列的值拷貝至輸出序列,返回值為目的位置(_OutIt _Dest)叠代器的值 auto iter = copy(_InIt _First, _InIt _Last, _OutIt _Dest); //替換算法,將輸入序列中的0全部替換為2,改變了輸入序列 replace(iVec.begin(), iVec.end(), 0, 2); //copy一份輸入序列,且將其中的0全部替換為2, replace_copy(iVec.begin(), iVec.end(),back_inserter(iVec1) 0, 2); //接受“可調用對象”的替換算法,將iVec中的負數全部轉換為正數 transform(iVec.begin(), iVec.end(), iVec.begin(), [](int num) {return num < 0 ? -num : num; }); //序列重新排序(升序,可以指定一個二元謂詞使其降序) sort(iVec.begin(), iVec.end()); //序列重新排序(穩定版) stable_sort(iVec.begin(), iVec.end()); //消除相鄰的重復項,返回最後一個不重復元素的叠代器 auto end_unique = unique(iVec.begin(), iVec.end()); //序列分區算法,將字符數大於5的放前面,用到謂詞見下章 bool compare5(string str) { return str.length() > 5; } //序列分區算法 partition(vecStr.begin(), vecStr.end(), compare5); //第三個參數是一元謂詞,返回指向 第一個使謂詞返回非0的元素的叠代器,否則返回尾叠代器 find_if(iVec.begin(), iVec.end(), /*一元謂詞*/) //對輸入序列中的每個元素調用 “可調用對象” for_each(iVec.begin(), iVec.end(), /*可調用對象*/); }
10.1-10.2泛型算法