STL学习笔记(算法概述)
算法头文件
要运用C++标准程序库的算法,首先必须包含头文件<algorithm>
使用STL算法时,经常需要用到仿函数以及函数配接器。它们定义域<functional>头文件中。
算法的分类
可以按以下分类方式描述各个STL算法:
非变动性算法(nonmodifying algorithms)
变动性算法(modifying algorithms)
移除性算法(removing algorithms)
变序性算法(mutating algorithms)
排序算法(sorting algorithms)
已序区间算法(sorted range algorithms)
数值算法(numeric algorighms)
非变动性算法
非变动性算法既不改变元素次序,也不改变元素值。它们透过input迭代器和forward迭代器完成工作,因此可作用于所有标准容器身上。
下表展示C++彼岸准程序库涵盖的所有非变动性算法:
最重要的算法之一便是for_each(),它将调用者提供的操作施加于每一个元素身上。例如可以用for_each()来打印区间内的每个元素。
for_each()也可以用来变动元素(如果传给它的操作行为会变动元素值的话),所以也可以说是变动性算法。
变动性算法
变动性算法,要不直接改变元素值,要不就是在复制在另一区间的过程中改变元素值(原区间不会发生变化)。
关联式容器的元素被视为常数,在变动元素的时候可能会违反容器的排序准则。因此变动性算法的目标区间不能是关联式容器。
下标列出了C++标准程序库涵盖的变动性算法。
最基本的变动性算法时for_each()和transform()。两者都可以变动序列中的所有元素值。他们的行为有以下不同点:
for_each()接受一项操作,该操作可变动其参数。因此该参数必须以by reference方式传递。例如:
void square(int& elem) //call by reference
{
elem = elem * elem;
}
...
for_each(coll.begin(),coll.end(), //range
square); //operation
transform()运用某项操作,该操作返回被改动后的参数。所以可以被用来将结果复制给原元素,例如:
int square(int elem) //call by value
{
return elem * elem;
}
...
transform(coll.begin(),coll.end() //source range
coll.begin(), //destination range
square); //operation
移除性算法
移除性算法是一种特殊的变动性算法。他们可以移除某区间内的元素,也可以在赋值过程中执行移除动作。
与变动性算法类似,移除性算法的目标区间也不能使关联式容器。下表列出C++标准程序库涵盖的所有移除性算法:
移除算法只是在逻辑上移除元素。使用的手段是:将不需将移除的元素往前覆盖应被移除的元素。
因此它并不改变操作区间内的元素个数,而是返回逻辑上的新终点位置。
变序性算法
所谓变序性算法,是透过元素值的赋值和交换,改变元素顺序(但不改变元素值)。和变动性算法一样,变序性算法也不能以关联式容易作为目标。
下表列出了C++标准程序库涵盖的所有变序性算法:
排序算法
排序算法是一种特殊的变序性算法。下表列出C++标准程序库中所有的排序算法:
已序区间算法
所谓已序区间算法,是指其所作用的区间在某种排序准则下已序。下表列出C++标准程序库中涵盖的所有已序区间算法。
数值算法
数值算法以不同方式组合数值元素。下表列出C++标准程序涵盖的所有数值算法:
关于算法的使用跟例子将在后面详细讨论
STL学习笔记(算法概述)的更多相关文章
- STL学习笔记--算法
关于STL算法需要注意的是: (1) 所有STL算法被设计用来处理一个或多个迭代器区间.第一个区间通常以起点和终点表示,至于其他区间,多数情况下只需提供起点即可,其终点可自动以第一区间的元素数推导出来 ...
- Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据
Effective STL 学习笔记 Item 34: 了解哪些算法希望输入有序数据 */--> div.org-src-container { font-size: 85%; font-fam ...
- Effective STL 学习笔记 31:排序算法
Effective STL 学习笔记 31:排序算法 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 39 ~ 41
Effective STL 学习笔记 39 ~ 41 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value
Effective STL 学习笔记 Item 38 : Design functor classes for pass-by-value */--> div.org-src-container ...
- Effective STL 学习笔记 Item 30: 保证目标区间足够大
Effective STL 学习笔记 Item 30: 保证目标区间足够大 */--> div.org-src-container { font-size: 85%; font-family: ...
- Effective STL 学习笔记: Item 22 ~ 24
Effective STL 学习笔记: Item 22 ~ 24 */--> div.org-src-container { font-size: 85%; font-family: monos ...
- Effective STL 学习笔记 Item 21:Comparison Function 相关
Effective STL 学习笔记 Item 21:Comparison Function 相关 */--> div.org-src-container { font-size: 85%; f ...
- Effective STL 学习笔记:19 ~ 20
Effective STL 学习笔记:19 ~ 20 */--> div.org-src-container { font-size: 85%; font-family: monospace; ...
- Effective STL 学习笔记: 多用 vector & string
Effective STL 学习笔记: 多用 vector & string 如果可能的话, 尽量避免自己去写动态分配的数组,转而使用 vector 和 string . 原书作者唯一想到的一 ...
随机推荐
- JS将JSON日期转换为指定格式的日期
1.引入JS日期转换的函数库 function Format(now,mask) { var d = now; var zeroize = function (value, length) { if ...
- cocos2d programming guide翻译(12)
http://bbs.tairan.com/thread-807-1-1.html 导演缓冲信息支持cocos2d v0.99.4和更新的版本颜色缓冲这个默认的缓冲时RGB565.它是一个16位的缓冲 ...
- 5.OpenStack添加镜像服务
添加镜像服务 这里是安装在控制器上 创建数据库 mysql -uroot -ptoyo123 CREATE DATABASE glance; GRANT ALL PRIVILEGES ON glanc ...
- C#读取JSON字符串
下面这个是一段JSON字符串宏观图 下面我们通过C#读取JSON字符串里的任何一个数值 string jsonString="上面JSON字符串"; //需要引用Newtonsof ...
- Laravel 项目使用 Carbon 人性化显示文章发表时间
比如说有这样一个需求:一篇文章的发表时间: **距离现在时间** **显示格式** < 1小时 xx分钟前 1小时-24小时 xx小时前 1天-10天 xx天前 >10天 直接显示日期 针 ...
- [BZOJ4760][Usaco2017 Jan]Hoof, Paper, Scissors dp
4760: [Usaco2017 Jan]Hoof, Paper, Scissors Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 136 Solv ...
- [BZOJ1854][SCOI2010]游戏 二分图最大匹
1854: [Scoi2010]游戏 Time Limit: 5 Sec Memory Limit: 162 MBSubmit: 5316 Solved: 2128[Submit][Status] ...
- 使用iSCSI Target创建集中式安全存储(一)
iSCSI 是一种块级别的协议,用于通过TCP/IP网络共享原始存储设备,可以用已经存在的IP和以太网如网卡.交换机.路由器等通过iSCSI协议共享和访问存储.iSCSI target是一种由远程iS ...
- POJ 2184 Cow Exhibition【01背包+负数(经典)】
POJ-2184 [题意]: 有n头牛,每头牛有自己的聪明值和幽默值,选出几头牛使得选出牛的聪明值总和大于0.幽默值总和大于0,求聪明值和幽默值总和相加最大为多少. [分析]:变种的01背包,可以把幽 ...
- Python的程序结构[7] -> 生成器/Generator -> 生成器浅析
生成器 / Generator 目录 关于生成器 生成器与迭代器 生成器的建立 通过迭代生成器获取值 生成器的 close 方法 生成器的 send 方法 生成器的 throw 方法 空生成器的检测方 ...