C++标准库---transform()
来源:互联网 发布:淘宝樊小林捕鼠 编辑:程序博客网 时间:2024/06/05 06:08
transform
算法transform()提供以下两种能力:
1.第一形式有4个参数,把源区间的元素转换到目标区间。也就是说,复制和修改元素一气呵成;
2.第二形式有5个参数,将前两个源序列中的元素合并,并将结果写入目标区间。注意:含有修改元素,仅仅只做复制元素,可以使用copy()。
第一种形式
transform(sourceBeg,sourceEnd,destBeg,op)
(1)针对源区间[sourceBeg,sourceEnd)中的每一个元素调用:op(elem) 并将结果写到以destBeg起始的目标区间内;
(2)返回目标区间内“最后一个被转换元素”的下一个位置,也就是第一个未被覆盖的元素位置;
(3)调用者必须确保目标区间有足够的空间,要不就得使用插入型迭代器;
(4)sourceBeg于destBeg可以相同,所以,和for_each()算法一样,你可以使用这个算法来变动某一序列内的元素;
(5)如果想以某值替换符合某一准则的元素,应使用replace()算法;
(6)复杂度:线性;
代码示例(第一种形式):
#include"fuzhu.h"using namespace std;int main(){vector<int> coll1;list<int> coll2;INSERT_ELEMENTS(coll1,1,9);PRINT_ELEMENTS(coll1,"coll1: ");transform(coll1.begin(),coll1.end(),coll1.begin(),negate<int>());PRINT_ELEMENTS(coll1,"negated: ");transform(coll1.begin(),coll1.end(),back_inserter(coll2),bind2nd(multiplies<int>(),10));PRINT_ELEMENTS(coll2,"coll2: ");transform(coll2.rbegin(),coll2.rend(),ostream_iterator<int>(cout," "),negate<int>());cout<<endl;system("pause");return 0;}
运行结果:
第二种形式
transform(source1Beg,source1End,source2Beg,destBeg,op)
(1)针对第一源区间[source1Beg,source1End)以及“从source2Beg开始的第二源区间”的对应元素,调用:op(source1Elem,source2Elem) 并将结果写入以destBeg起始的目标区间内;
(2)返回区间内的“最后一个被转换元素”的下一位置,就是第一个未被覆盖的元素的位置;
(3)调用者必须保证第二源区间有足够空间(至少拥有和第一区间相同的空间大小);
(4)调用者必须确保目标区间有足够空间,要不就得使用插入型迭代器;
(5)source1Beg,source2Beg,destBeg可以相同。所以,可以让元素自己和自己结合,然后将结果覆盖至某个序列;
(6)复杂度:线性;
代码示例:
#include"fuzhu.h"using namespace std;int main(){vector<int> coll1;list<int> coll2;INSERT_ELEMENTS(coll1,1,9);PRINT_ELEMENTS(coll1,"coll1: ");transform(coll1.begin(),coll1.end(),coll1.begin(),coll1.begin(),multiplies<int>());//1*1 2*2 PRINT_ELEMENTS(coll1,"squared: ");transform(coll1.begin(),coll1.end(),coll1.rbegin(),back_inserter(coll2),plus<int>());//1+81 4+64 PRINT_ELEMENTS(coll2,"coll2: ");cout<<"diff: ";transform(coll1.begin(),coll1.end(),coll2.begin(),ostream_iterator<int>(cout," "),minus<int>());//1-82 4-68cout<<endl;system("pause");return 0;}
运行结果:
- C++标准库---transform()
- 高效使用标准库:for_each() vs. transform()
- 标准算法transform
- CUJ:高效使用标准库:for_each() vs. transform()
- C标准库“圣经”:C标准库
- [C++] STL Transform练习
- C++STL-算法transform
- C++--STL--transform算法
- 标准c++ 库
- C标准库[转]
- C标准库
- (不错)C标准库
- C标准库
- C语言标准库
- C标准库“圣经”
- 解读《C标准库》
- C标准库
- c 标准库
- 秀色书文软件 发布
- UVA 152-Tree's a Crowd(暴力求解三维坐标求最短距离)
- jvm的happens-before原则
- Leetcode -- Merge k Sorted Lists
- 游戏中时间管理器
- C++标准库---transform()
- android AR项目总结
- Android判断当前Service是否是重启的Servcie
- 重构.改善既有代码的设计
- day05_java数组的操作
- 第一天java
- Java中类的构造器
- js中的拖拽——两种
- canvas.save() canvas.restore() 作用