transform用法

transformfunction template
template < class InputIterator, class OutputIterator, class UnaryOperator >
  OutputIterator transform ( InputIterator first1, InputIterator last1,
                             OutputIterator result, UnaryOperator op );

template < class InputIterator1, class InputIterator2,
           class OutputIterator, class BinaryOperator >
  OutputIterator transform ( InputIterator1 first1, InputIterator1 last1,
                             InputIterator2 first2, OutputIterator result,
                             BinaryOperator binary_op );
<algorithm>

Apply function to range

The first version applies op to all the elements in the input range ([first1,last1)) and stores each returned value in the range beginning at result.

The second version uses as argument for each call to binary_op one element from the first input range ([first1,last1)) and one element from the second input range (beginning at first2).

The behavior of this function template is equivalent to:

template < class InputIterator, class OutputIterator, class UnaryOperator >
  OutputIterator transform ( InputIterator first1, InputIterator last1,
                             OutputIterator result, UnaryOperator op )
{
  while (first1 != last1)
    *result++ = op(*first1++);  // or: *result++=binary_op(*first1++,*first2++);
  return result;
}

The function allows for the destination range to be the same as one of the input ranges to make transformations in place.

Parameters

first1, last1
Input iterators to the initial and final positions of the first sequence. The range used is  [first1,last1), which contains all the elements between  first1 and  last1, including the element pointed by  first1 but not the element pointed by  last1.
first2
Input iterator to the initial position of the second range. The range includes as many elements as  [first1,last1).
result
Output iterator to the initial position of the range where function results are stored. The rangeincludes as many elements as  [first1,last1).
op
Unary function taking one element as argument, and returning some result value. This can either be a pointer to a function or an object whose class overloads operator().
binary_op
Binary function taking two elements as argument (one of each of the two sequences), and returning some result value. This can either be a pointer to a function or an object whose class overloads  operator().

Return value

An iterator pointing to the element that follows the last element written in the result sequence.

重载运算符()

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class student{
	public:
		int key;
		int value;
	student operator()(student s){
		 s.value=s.value+1;
		return s;
}
};
int main(){
	vector<student>vec(5);
	vector<student>vec_sub;
	vec[0].key=1;
	vec[0].value=1;
	vec[1].key=1;
	vec[1].value=2;
	vec[2].key=2;
	vec[2].value=2;
	vec[3].key=3;
	vec[3].value=3;
	vec[4].key=4;
	vec[4].value=4;
	vec_sub.resize(vec.size());
	vector<student>::iterator it;
	transform(vec.begin(),vec.end(),vec_sub.begin(),student());
	for(it=vec_sub.begin();it!=vec_sub.end();it++)
		cout<<(*it).value<<endl;
}

函数处理

#include<iostream>
#include<algorithm>
#include<vector>
using namespace std;
class student{
	public:
		int key;
		int value;
/*	student operator()(student s){
		 s.value=s.value+1;
		return s;
}*/
};
student op(student s){
		s.value=s.value+1;
		return s;
}
int main(){
	vector<student>vec(5);
	vector<student>vec_sub;
	vec[0].key=1;
	vec[0].value=1;
	vec[1].key=1;
	vec[1].value=2;
	vec[2].key=2;
	vec[2].value=2;
	vec[3].key=3;
	vec[3].value=3;
	vec[4].key=4;
	vec[4].value=4;
	vec_sub.resize(vec.size());
	vector<student>::iterator it;
	transform(vec.begin(),vec.end(),vec_sub.begin(),op);
	for(it=vec_sub.begin();it!=vec_sub.end();it++)
		cout<<(*it).value<<endl;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值