初识泛型算法
1只读算法
find()
count()
accumulate(vec.cbegin(),vec.cend(),0);
如果对string用accumulate算法,第三个参数不能是const char*因为它没有+操作符。
equal(r1.cbegin(),r1.cend(),r2.cbegin());
用来判断两个序列是否保存相同的值
r2大小需要>=r1;
第二个序列至少与第一个序列一样长
2写容器元素的算法
fill(vec.begin(),vec.end(),0)将每个元素置为0;
向目的位置的迭代器写入数据的算法要求目的位置足够大,能容纳要写入的元素。
back_inserter插入迭代器
创建一个迭代器,作为算法的目的位置来使用
vector<int>vec;
fill_n(back_inserter(vec),10,0);
拷贝算法
copy(v1.begin(),v1.end(),v2.begin());接受3个参数,返回目的位置递增后的值,也就是尾元素之后的位置。
replace(ilst.begin(),ilist.end(),0,42);replace算法接受4个参数:前两个迭代器,表示输入序列,第三个是要搜索的值,第四个是新值,将所有等于第一个值的元素替换为第二个。
3重排算法
sort
标准库算法对迭代器而不是容器进行操作,因此,算法不能直接添加或删除元素。
定制操作
sort算法默认使用<运算符,可以通过改变运算符实现新的排序顺序,需要重载sort函数的默认行为。
向算法传递函数
谓词
sort的第二个版本,接受第三个参数,是一个谓词。
谓词是一个可调用的表达式,返回结果是能用作条件的值。谓词分为一元谓词和二元谓词。
lambda表达式
[capture list] (parameter list)->return type{function body}
捕获列表、返回类型,参数列表,函数体
for_each算法
当混合使用隐式捕获和显式捕获时,捕获列表中第一个元素必须是&或=,指定了默认捕获方式为引用或值。