for_each算法和transform算法区别
来源:互联网 发布:行业研究 知乎 编辑:程序博客网 时间:2024/06/08 19:06
对于for_each()算法和transform()算法更多基础的内容请参考以下两篇http://文章:
for_each()算法:点击打开链接
transform()算法:点击打开链接
首先,for_each()算法和transform()算法都是属于变动性算法(modifying algorithms),它们都能改变序列中所有元素值,变动性算法的描述有以下两点体现:
1.直接改变元素;for_each()和transform()都具有这种能力。
2.复制到另一个区间的过程中改变元素的值,这种情况下,源区间的值不会发生变化;第二点只有transform()具有这种能力。
这两种算法在改变序列中所有元素的方式是不同的:
- for_each()接受一项操作,该操作可以变动序列中的某个值。因此该参数必须以by reference方式传递,对Square函数返回值无要求。例如:
void Square(int &elem){elem = elem * elem;//assign new value}...for_each(vecCollection.begin(), vecCollection.end(), Square);
- transform()运用某项操作,该操作返回被改动后的参数,对调用的函数有返回值要求。例如:
int MultiplySelf(int elem){ return elem * elem;}...for_each(vecCollection.begin(), vecCollection.end(), MultiplySelf);
通过for_each和transform算法实现可以有助于理解这两个区别。
//for_each()算法实现for (; _ChkFirst != _ChkLast; ++_ChkFirst){_Func(*_ChkFirst);//可以不需要返回值}//transform算法实现for (; _First1 != _Last1; ++_First1, ++_First2, ++_Dest){*_Dest = _Func(*_First1, *_First2);//有赋值操作,_Func需要有返回值}
其次,transform()的速度稍微慢些,因为它是将操作返回值赋值给元素,而不是直接变动元素。不过其灵活性比较高,它可以把某个序列复制到目标序列中,同时变动元素内容。transform的第二种形式还可以将两个源序列中的元素组合结果放到目标区间。
2 0
- for_each算法和transform算法区别
- STL_算法 for_each 和 transform 比较
- STL遍历算法 “for_each ”,“transform”
- STL常用遍历算法for_each和transform的比较
- STL中的两个算法for_each与transform
- STL算法 ------- transform() 与 for_each()比较
- C++11 lambda表达式在for_each和transform算法下的使用
- STL算法(19)——for_each()和transform()的比较
- STL学习之十四:常用算法 for_each 和 transform以及adjacent_find的示例代码
- for_each 和 transform比较
- for_each算法
- 算法 for_each
- for_each()算法
- for_each算法
- STL通用算法: for_each,c++11标准范围for,transform.
- c++ for_each transform的区别
- random_shuffle 和transform算法
- for_each和transform用法比较
- MySQL5.7.10下载及安装及配置
- 吉大培训 day 1 test
- Logistic regression
- RT3070 AP模式移植 基于linux3.0内核
- 建堆&堆排序-代码
- for_each算法和transform算法区别
- ssh无密码访问
- 实验6-5 使用函数输出指定范围内的Fibonacci数 (20分)
- linux下JDK设置
- UI学习第06天
- 操作系统学习笔记:分布式系统结构
- Android Dagger依赖注入框架浅析
- 开发环境配置
- 岭回归(Ridge Regression)