charpter 10 泛型算法
- 大多数算法定义在头文件algorithm中
- find函数
find(begin,end,val) 返回值 指向第一个等于给定值的元素的迭代器。返回end表示没有找到
- find_if函数
它和find算法很类似返回的是找到元素的佚代器。它的第三个参数是一个函数指针(function pointer)或函数对象(object functional)如果是函数对象。
只读算法
- accumulate(begin,end,初值)表示从范围内求和 !注意初值必须和类型严格一致
- equal(r1.begin(),r1.end(),r2.begin()) 比较两对于序列是否相等
写容器元素算法
- fill(begin,end,val),范围内置成val值
- fill_n (dest,n,val),从dest开始n个置成val值。不能超过范围
- copy(1.begin,1.end,2.begin)
- replace(begin(),end(),old,new)
元素操作
- 排序 sort(begin,end)
- unique(begin,end)将重复项放置尾部,返回值为指向不重复元素之后的一个
- stable_sort 稳定排序算法维持相等元素的原有顺序
- sort可添加函数,即(begin,end,fun)
参数绑定
头文件:functional 以及声明using namespace std::placeholders
- bind函数:接受一个可调用对象,生成一个新的可调用对象来适应原对象的参数列表
- 形式
auto newCallable = bind(callable,arg_list)
,当调用newCallble时,会调用callable,并传递给它arg_list中的参数。其中可能会包含形如_n
的名字,表示参数的位置举例 auto check_size6 = bind(check_size,_1,6);
这边checksize(const &s,size_type:size),而check_size6(s),对应于_1这个占位参数,6为默认参数
auto check_size6 = bind(check_size,_1,_2); check_size6(s,6);
如果参数需要引用,则必须使用ref 比如bind(check_size,_1,ref(sz));
其他迭代器
插入迭代器
实现向给定容器添加元素
- back_inserter,front_inserter,inserter
- inserter(c,iter),返回值为iter位置前元素的位置
it=inserter(c,iter); *it=val;
等价于: iter=c.insert(iter,val);++iter;
iosream 迭代
反向迭代器
除forward_list之外,其他容器都支持反向迭代器。rbegin(),rend();
- 反向迭代器转换为普通迭代器 rdiedai.base();
[line.rbegin(),rcomma) ==[rcomma.base(),line.end)