thrust::transform
Defined in thrust/transform.h
-
template<typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename OutputIterator, typename BinaryFunction>
OutputIterator thrust::transform(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, OutputIterator result, BinaryFunction op) This version of
transform
applies a binary function to each pair of elements from two input sequences and stores the result in the corresponding position in an output sequence. Specifically, for each iteratori
in the range [first1
,last1
) andj = first + (i - first1)
in the range [first2
,last2
) the operationop(*i,*j)
is performed and the result is assigned to*o
, whereo
is the corresponding output iterator in the range [result
,result
+ (last
-first
) ). The input and output sequences may coincide, resulting in an in-place transformation.The algorithm’s execution is parallelized as determined by
exec
.The following code snippet demonstrates how to use
transform
to compute the sum of two ranges using thethrust::host
execution policy for parallelization:#include <thrust/transform.h> #include <thrust/functional.h> #include <thrust/execution_policy.h> ... int input1[6] = {-5, 0, 2, 3, 2, 4}; int input2[6] = { 3, 6, -2, 1, 2, 3}; int output[6]; thrust::plus<int> op; thrust::transform(thrust::host, input1, input1 + 6, input2, output, op); // output is now {-2, 6, 0, 4, 4, 7};
Some backends of transform may take advantage knowing if the transformation operation supports copyable arguments.
- Parameters
exec – The execution policy to use for parallelization.
first1 – The beginning of the first input sequence.
last1 – The end of the first input sequence.
first2 – The beginning of the second input sequence.
result – The beginning of the output sequence.
op – The transformation operation. Relying on the address of op’s arguments in its implementation is deprecated.
- Template Parameters
DerivedPolicy – The name of the derived execution policy.
InputIterator1 – is a model of Input Iterator and
InputIterator1's
value_type
is convertible toBinaryFunction's
first_argument_type
.InputIterator2 – is a model of Input Iterator and
InputIterator2's
value_type
is convertible toBinaryFunction's
second_argument_type
.OutputIterator – is a model of Output Iterator.
BinaryFunction – is a binary function type which’s return type is convertible to
OutputIterator's
value_type
.
- Returns
The end of the output sequence.
- Pre
first1
may equalresult
, but the range[first1, last1)
shall not overlap the range[result, result + (last1 - first1))
otherwise.- Pre
first2
may equalresult
, but the range[first2, first2 + (last1 - first1))
shall not overlap the range[result, result + (last1 - first1))
otherwise.