transform | function 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;
}