cb38a_c++_STL_算法_transformtransform()算法有两种形式:transform(b1,e1,b2,op);//b1(源区间)的数据通过op函数处理,存放在b2(目标区间)transform(b1,e1,b2,b3,op)//把b1,b2结合一起通过op函数处理,存放到b3
注意: 1.如果目标与源相同,transform()就和for_each()一样 2.如果想以某值替换符合规则的元素,应该使用replace()算法。
transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内。transform函数包含在头文件中。
以下是std::transform的两个声明,
一元操作:
template
OutputIterator transform (InputIterator first1, InputIterator last1,OutputIterator result, UnaryOperation op);对于一元操作,将op应用于[first1, last1]范围内的每个元素,并将每个操作返回的值存储在以result开头的范围内。给定的op将被连续调用last1-first1+1次。
op可以是函数指针或函数对象或lambda表达式。
例如:op的一个实现 即将[first1, last1]范围内的每个元素加5,然后依次存储到result中。
int op_increase(int i) {return (i + 5)}; 调用std::transform的方式如下:
std::transform(first1, last1, result, op_increase); 二元操作:
template OutputIterator transform (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, OutputIterator result,BinaryOperation binary_op);
对于二元操作,使用[first1, last1]范围内的每个元素作为第一个参数调用binary_op,并以first2开头的范围内的每个元素作为第二个参数调用binary_op,每次调用返回的值都存储在以result开头的范围内。给定的binary_op将被连续调用last1-first1+1次。binary_op可以是函数指针或函数对象或lambda表达式。
例如:binary_op的一个实现即将first1和first2开头的范围内的每个元素相加,然后依次存储到result中。
int op_add(int, a, int b) {return (a + b)}; 调用std::transform的方式如下:
std::transform(first1, last1, first2, result, op_add);
#include //预定义函数对象 negate() 把一个数变成负数
1>d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\algorithm(1443): template inline _OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func) { // transform [_First, _Last) with _Func _Adl_verify_range(_First, _Last); auto _UFirst = _Get_unwrapped(_First); const auto _ULast = _Get_unwrapped(_Last); auto _UDest = _Get_unwrapped_n(_Dest, _Idl_distance(_UFirst, _ULast)); for (; _UFirst != _ULast; ++_UFirst, (void)++_UDest) { *_UDest = _Func(*_UFirst); }
_Seek_wrapped(_Dest, _UDest); return (_Dest); }
使用预定义函数对象有2个参数是,需要使用预定义函数对象适配器,bind2nd bind2nd(multiplies(),10) //error C2065: “ostream_iterator”: 未声明的标识符,未包含#include
/*cb38a_c++_STL_算法_transform
transform()算法有两种形式:
transform(b1,e1,b2,op);//b1(源区间)的数据通过op函数处理,存放在b2(目标区间)
transform(b1,e1,b2,b3,op)//把b1,b2结合一起通过op函数处理,存放到b3
注意:
1.如果目标与源相同,transform()就和for_each()一样
2.如果想以某值替换符合规则的元素,应该使用replace()算法。
transform在指定的范围内应用于给定的操作,并将结果存储在指定的另一个范围内。transform函数包含在头文件中。
以下是std::transform的两个声明,
一元操作:
template
OutputIterator transform (InputIterator first1, InputIterator last1,OutputIterator result, UnaryOperation op);
对于一元操作,将op应用于[first1, last1]范围内的每个元素,并将每个操作返回的值存储在以result开头的范围内。给定的op将被连续调用last1-first1+1次。
op可以是函数指针或函数对象或lambda表达式。
例如:op的一个实现 即将[first1, last1]范围内的每个元素加5,然后依次存储到result中。
int op_increase(int i) {return (i + 5)};
调用std::transform的方式如下:
std::transform(first1, last1, result, op_increase);
二元操作:
template
OutputIterator transform (InputIterator1 first1, InputIterator1 last1,InputIterator2 first2, OutputIterator result,BinaryOperation binary_op);
对于二元操作,使用[first1, last1]范围内的每个元素作为第一个参数调用binary_op,并以first2开头的范围内的每个元素作为第二个参数调用binary_op,
每次调用返回的值都存储在以result开头的范围内。给定的binary_op将被连续调用last1-first1+1次。binary_op可以是函数指针或函数对象或lambda表达式。
例如:binary_op的一个实现即将first1和first2开头的范围内的每个元素相加,然后依次存储到result中。
int op_add(int, a, int b) {return (a + b)};
调用std::transform的方式如下:
std::transform(first1, last1, first2, result, op_add);
#include //预定义函数对象
negate() 把一个数变成负数
1>d:\program files (x86)\microsoft visual studio\2017\community\vc\tools\msvc\14.16.27023\include\algorithm(1443):
template inline
_OutIt transform(const _InIt _First, const _InIt _Last, _OutIt _Dest, _Fn _Func)
{ // transform [_First, _Last) with _Func
_Adl_verify_range(_First, _Last);
auto _UFirst = _Get_unwrapped(_First);
const auto _ULast = _Get_unwrapped(_Last);
auto _UDest = _Get_unwrapped_n(_Dest, _Idl_distance(_UFirst, _ULast));
for (; _UFirst != _ULast; ++_UFirst, (void)++_UDest)
{
*_UDest = _Func(*_UFirst);
}
_Seek_wrapped(_Dest, _UDest);
return (_Dest);
}
使用预定义函数对象有2个参数是,需要使用预定义函数对象适配器,bind2nd
bind2nd(multiplies(),10)
//error C2065: “ostream_iterator”: 未声明的标识符,未包含#include
*/
#include
#include
#include
#include
#include //预定义函数对象
#include
using namespace std;
int main()
{
vector ivec;
list ilist;
for (int i = 1; i
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?