stl transform algorithm example

本文详细介绍了 C++ 标准库中的 transform 函数用法,包括单输入单输出及双输入单输出两种模板形式。提供了具体的代码示例,展示了如何使用自定义函数对容器内的元素进行操作。
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 );

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:

1
2
3
4
5
6
7
8
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.

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
// transform algorithm example

#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;

int op_increase (int i) { return ++i; }
int op_sum (int i, int j) { return i+j; }

int main () {
vector<int > first;
vector<int > second;
vector<int >::iterator it;

// set some values:
for (int i=1; i<6; i++) first.push_back (i*10); // first: 10 20 30 40 50

second.resize(first.size()); // allocate space
transform (first.begin(), first.end(), second.begin(), op_increase);
// second: 11 21 31 41 51

transform (first.begin(), first.end(), second.begin(), first.begin(), op_sum);
// first: 21 41 61 81 101

cout << "first contains:" ;
for (it=first.begin(); it!=first.end(); ++it)
cout << " " << *it;

cout << endl;
return 0;
}



Output:

first contains: 21 41 61 81 101


Complexity

Linear: Performs as many assignments and applications of op or binary_op as the number of elements in the range [first1,last1) .

 

http://www.cplusplus.com/reference/algorithm/transform/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值