STL-transform算法
来源:互联网 发布:f.lux for mac 编辑:程序博客网 时间:2024/05/16 02:14
transform算法的作用是 将一个容器中的值搬运到另一个容器中。提供了两个重载版本,我们先看下transform的源代码实现:
重载版本一:
template<class_InIt, class _OutIt, class _Fn1> inline _OutIt_Transform(_InIt _First, _InIt _Last,_OutIt _Dest, _Fn1 _Func) { for(; _First != _Last; ++_First, ++_Dest) *_Dest= _Func(*_First); return(_Dest); }
从参数可看出InIt表示这个算法接收的迭代器类型为输入迭代器类型。参数需要需要容器开始迭代器_First,结束迭代器_OutIt,标识被拷贝容器元素区间,将这个区间中的元素拷贝到_Dest迭代器中所表示的容器中。这里要注意,目标容器中一定要有足够的空间。最后一个参数是一个函数对象或者普通函数,接收容器中的元素作为参数,我们可在此函数中对原容器中元素进行运算,将运算结果插入到目标容器中。
我们举个例子:
struct transformTest01{int operator()(int val){return val + 100;}};struct print01{void operator()(int val){cout << val << " ";}};void test01(){vector<int> vSource;for (int i = 0; i < 10;i ++){vSource.push_back(i + 1);}//目标容器vector<int> vTarget;//给vTarget开辟空间vTarget.resize(vSource.size());//将vSource中的元素搬运到vTargetvector<int>::iterator it = transform(vSource.begin(), vSource.end(), vTarget.begin(), transformTest01());//打印for_each(vTarget.begin(), vTarget.end(), print01()); cout << endl;}
重载版本二:
template<class_InIt1,class _InIt2,class _OutIt,class _Fn2> inline _OutIt_Transform(_InIt1 _First1, _InIt1 _Last1,_InIt2 _First2, _OutIt _Dest, _Fn2_Func) { for(; _First1 != _Last1; ++_First1, ++_First2, ++_Dest) *_Dest= _Func(*_First1, *_First2); return(_Dest); }
这个版本的transform算法可将两个容器中的元素经过Func运算存储到目标容器中。
//将容器1和容器2中的元素相加放入到第三个容器中struct transformTest02{int operator()(int v1,int v2){return v1 + v2;}};void test02(){vector<int> vSource1;vector<int> vSource2;for (int i = 0; i < 10; i++){vSource1.push_back(i + 1);}//目标容器vector<int> vTarget;//给vTarget开辟空间vTarget.resize(vSource1.size());transform(vSource1.begin(), vSource1.end(), vSource2.begin(),vTarget.begin(), transformTest02());//打印for_each(vTarget.begin(), vTarget.end(), print01()); cout << endl;}
阅读全文
0 0
- STL 算法之transform
- C++STL-算法transform
- C++ STL 算法:transform
- STL算法 ------- transform()
- STL算法(18)-transform()
- C++ STL算法transform
- C++--STL--transform算法
- STL-transform算法
- STL algorithm算法transform(57)
- STL遍历算法 “for_each ”,“transform”
- STL中的两个算法for_each与transform
- STL算法 ------- transform() 与 for_each()比较
- STL transform
- STL:transform
- 九、STL算法-变值算法(copy、transform)
- STL常用遍历算法for_each和transform的比较
- STL通用算法: for_each,c++11标准范围for,transform.
- transform算法
- VMware vSphere Web Services SDK编程指南(十)- 10.6 配置 iSCSI 存储
- Linux下安装Mysql5.7.x数据库
- 文件上传下载
- Linux 设备驱动模型中的class(类)
- Python脚本-批量修改文件名
- STL-transform算法
- JackSon学习笔记(一)
- 复数类
- 软件质量模型
- C语言,C++所忽视掉的一般数据的类型
- 直线扫描转换算法
- ubuntu14.04-Ros-indigo下配置Eigen库,亲测好用!!!
- CodeForces 600C
- 解决VS2005 VS2008 vs2010断点无效-源代码与原始版本不同