C++ primer | 第10章 泛型算法
来源:互联网 发布:印度军工产业知乎 编辑:程序博客网 时间:2024/06/16 05:08
10.1 概述
泛型算法 generic algorithm 提供了一些经典的算法接口比如排序、搜索等,适用于多种的容器和元素。
算法一般使用迭代器来工作
//在vector容器vec中findauto result = find(vec.cbegin(),vec.cend(),val);//在数组中findint* result=find(begin(ia),end(ia),val);
迭代器令算法不依赖于容器,但是算法依赖于元素的类型。
10.2 初识泛型算法
- 只读算法
- find
- accumulate
- equal
- 写容器元素的算法
- fill
- fill_n(dest,n,val)/fill_n(vec.begin(),vec.size(),0);
- back_inserter,返回一个与该容器绑定的插入迭代器
- copy
- repalce
- replace_copy(ilst.cbegin(),ilst.cend(),back_inserter(ivec),0,42)//ilst并未改变,ivec包含ilst的一份拷贝,并且0变为了42.
- 重排
- sort
- unique()//没有删除重复元素
10.3 定制操作
- 向算法传递表达式
这里使用谓词(predicate)来传递函数,比如使用一个比较单词长度的表达式来代替sort中原来的<运算。
另外本小节提到了stable_sort函数 - lambda
lambda的使用形式为[capturelist](parameter list)->return type{function body}
如果可以不用加return type可以写成[capturelist](parameter list){function body}
本节中介绍的函数有 find_if for_each
完整的函数
- lambda的捕获和返回
- 值捕获
- 引用捕获
- 隐式捕获 & 或=
- 混合使用隐式和显示
- mutable 可变lambda
- 引用捕获可变lambda
- 指定返回类型
- 参数绑定
- bind 可以看作函数的一个适配器,定义在functional头文件中,形式如
auto newcallalbe=bind(callable,arg_list)
arg_list是一些形如_1,_2,...,_n
的占位符 - 占位符来自namespace:placeholders 可以这样声明
using namespace std::placeholders
- bind的参数调用时按照1-》n的顺序,因此可以用来重排参数
- 绑定引用参数使用
ref或cref
函数,此函数与bind定义在同一个头文件中
- bind 可以看作函数的一个适配器,定义在functional头文件中,形式如
10.4 再探迭代器
- 插入迭代器 insert iterator
- 流迭代器 steam iterator
- 反向迭代器 reverse iterator
移动迭代器 move iterator
- 插入迭代器
- back_inserter
- front_inserter
- inserter
- iostream
- istream_iterator//
istream_iterator<T>in(is)
;istream_iterator<T> end;
- ostream_iterator//
ostream_iterator<T>out(os)
;ostream_iterator<T> out(os,d);
d指向一个空字符结尾的字符数组
- istream_iterator//
- 反响迭代器
- 有个成员函数base()用来完成正向转换
- 插入迭代器
10.5 泛型算法结构
基本特性:要求迭代器哪些操作
五类迭代器:
1. 输入
2. 输出
3. 前向
4. 双向
5. 随机访问、、支持下标运算符
算法的形参模式:
alg(beg,end,other);alg(beg,end,dest,other);//只接受单个目标直接指向一个容器的迭代器alg(beg,end,beg2,other);//接受第二个输入序列alg(beg,end,beg2,end2,other);
命名规范:
1. 重载接受谓词
2. _if 版本
3. _copy版本
10.6 特定容器算法
list和forward_list应该优先使用成员函数而不是通用算法,但是要注意链表版本的算法会改变底层的容器。
链表类型的几个成员函数:
mergeremoveremove_ifreversesortuniquesplice
总结
- 1 概述
- 2 初识泛型算法
- 3 定制操作
- 4 再探迭代器
- 5 泛型算法结构
- 6 特定容器算法
- 总结
0 0
- [C/C++] 第11章 泛型算法 Primer
- 【C++primer学习笔记】第11章 泛型算法
- c++ primer (第10章 泛型算法) 算法
- C++Primer第五版 第10章 泛型算法(练习解答)
- 《C++Primer》读书笔记——第10章 泛型算法
- 《c++ primer》第10章 泛型算法 学习笔记
- C++ Primer学习总结 第10章 泛型算法
- 【c++ primer读书笔记】【第10章】泛型算法
- C++ primer | 第10章 泛型算法
- 《C++primer》 泛型算法
- 《C++ Primer》 第11章 泛型算法 [ 未完 ]
- 《C++ primer》第11章 泛型算法
- 【C++ Primer】第11章 泛型算法
- 《C++Primer》 第09章 容器与算法
- 《C++Primer》 第09章 容器与算法
- C++Primer习题第10章
- 《C++ Primer 4 Answer Book》 整理[10]——第11章 泛型算法
- 《C++ Primer》第10章:泛型算法 学习笔记总结
- 差异入微——浅析电商购物流程设计
- 实习工作日志
- linux挂载磁盘
- php.ini 配置
- [Paper note] Joint Learning of Single-image and Cross-image Representations for Person Re-id.
- C++ primer | 第10章 泛型算法
- Js数组排序函数sort()介绍
- C++のWindows游戏开发 第一天
- Oauth-Open Authorization
- android ANR产生原因和解决办法
- MongoDB——Aggregates聚合
- 心得: 把具体的事物概念话, 再通过概念划的思维解决事物, 得出结果化的时候再进行具体化, 看似简单实则不易啊
- ios调试打印log发布去log
- Linux ps -ef 排除当前进程(kill当前Tomcat进程)