for_each算法和transform算法区别
2016-01-16 22:34
295 查看
对于for_each()算法和transform()算法更多基础的内容请参考以下两篇http://文章:
for_each()算法:点击打开链接
transform()算法:点击打开链接
首先,for_each()算法和transform()算法都是属于变动性算法(modifying algorithms),它们都能改变序列中所有元素值,变动性算法的描述有以下两点体现:
1.直接改变元素;for_each()和transform()都具有这种能力。
2.复制到另一个区间的过程中改变元素的值,这种情况下,源区间的值不会发生变化;第二点只有transform()具有这种能力。
这两种算法在改变序列中所有元素的方式是不同的:
for_each()接受一项操作,该操作可以变动序列中的某个值。因此该参数必须以by reference方式传递,对Square函数返回值无要求。例如:
transform()运用某项操作,该操作返回被改动后的参数,对调用的函数有返回值要求。例如:
通过for_each和transform算法实现可以有助于理解这两个区别。
其次,transform()的速度稍微慢些,因为它是将操作返回值赋值给元素,而不是直接变动元素。不过其灵活性比较高,它可以把某个序列复制到目标序列中,同时变动元素内容。transform的第二种形式还可以将两个源序列中的元素组合结果放到目标区间。
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的第二种形式还可以将两个源序列中的元素组合结果放到目标区间。
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Ruby中require、load、include、extend的区别介绍
- Ruby中的p和puts的使用区别浅析
- Ruby中的block、proc、lambda区别总结
- Redis和Memcached的区别详解
- Lua中调用函数使用点号和冒号的区别
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua中关于求模与求余的区别介绍
- Lua教程(二):C++和Lua相互传递数据示例
- TMP、TEMP和TMP文件区别解析
- C#基础语法:结构和类区别详解
- 深入c# 类和结构的区别总结详解
- C#中string.Empty和null的区别详解
- sqlserver和oracle中对datetime进行条件查询的一点区别小结
- 网页中Span和Div的区别
- 大家看了就明白了css样式中类class与标识id选择符的区别小结