10.1-10.2泛型算法
Posted liyubo
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了10.1-10.2泛型算法相关的知识,希望对你有一定的参考价值。
//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(), [](int num) {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泛型算法的主要内容,如果未能解决你的问题,请参考以下文章
算法漫游指北(第十篇):泛型递归递归代码模板递归思维要点分治算法回溯算法