第十章 知识点总结
10.1 概述
标准库定义了一组泛型算法,因为他们实现了一些经典算法的公共接口,如排序和搜索。称它们为泛型的,是因为它们可以用于不同的类型的元素和多种容器类型。
10.2 初识泛型算法
10.2.1 只读算法
accumulate(v.begin(),v.end(),0)
该算法接受三个参数,前两个指出需要求和的范围。第三个为和的初值。
equal(v.begin(),v.end(),v2.begin())
该算法用于确定两个序列是否保存相同的值。前两个参数为第一个序列的元素范围,第三个参数为第二个序列的首元素。
10.2.2 写容器算法
fill(v.begin(),v.end(),0)
fill_n(dest,n,val)
back_insert
插入迭代器,
fill_n(back_insert(vec),10,n)
拷贝算法
copy(begin(a1),end(a1),a2)
前两个参数为迭代器范围,第三个表示目标序列起始位置。
replace(v.begin(),v.end(),0,42)
前两个参数为迭代器范围,后两个一个是搜索的值,一个是新值。
10.2.3 重排容器算法
sort(v.begin(),v.end())
排序
unique()
消除重复元素,返回一个指向不重复值范围末尾的迭代器。并没有删除元素。元素位置仍有元素存在,但不知是什么。
10.3 定制操作
谓词,是一个可调用的表达式。其返回结果是一个能用做条件的值。
10.3.1 向算法传递函数
bool isShorter(const string &s1,const string &s2)
{
return s1.size()<s2.size();
}
//重写排序算法,向算法传递函数
sort(word.begin(),word.end(),isShorter)
10.3.2 lambda 表达式
根据算法接受一元谓词还是二元谓词,我们传递给算法的谓词必须严格接受一个或者两个参数。有时需要更多参数。
一个lambda表达式表示一个可调用的代码单元,可以将其理解为一个未命名的内联函数。
stable_sort(word.begin(),word.end(),
[](const string &s1,const string &s2){return s1.size()<s2.size()})
使用捕获列表
[sz](const string &s1){return s1.size()<sz}
10.3.4 参数绑定
bind(函数名,arg_list)
//例程
auto g=bind(f,a,b,_2,c,_1)
//生成一个新的可调用,他有两个参数,分别用占位符,_2,_1表示。这个新的可调用对象将他自己的参数作为第三个第五个参数传递给f,f的第一个,第二个,第四个参数分别绑定到给定的值a\b\c上。
调用g(X,Y)
实际为
f(a,b,Y,c,X)
知识点:反向迭代器
vec.crbegin();
指向容器最后一个元素。
vec.crend();
指向容器首元素之前的一个迭代器。
反向迭代器操作string会使其倒序,可使用成员函数base(),使其返回对应的普通迭代器。

浙公网安备 33010602011771号