Template Function thrust::transform_inclusive_scan(InputIterator, InputIterator, OutputIterator, UnaryFunction, AssociativeOperator)¶
Function Documentation¶
-
template<typename
InputIterator
, typenameOutputIterator
, typenameUnaryFunction
, typenameAssociativeOperator
>
OutputIteratorthrust
::
transform_inclusive_scan
(InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_op, AssociativeOperator binary_op) transform_inclusive_scan
fuses thetransform
andinclusive_scan
operations.transform_inclusive_scan
is equivalent to performing a tranformation defined byunary_op
into a temporary sequence and then performing aninclusive_scan
on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. Intransform_inclusive_scan
,unary_op(*first)
is assigned to*result
and the result ofbinary_op(unary_op(*first), unary_op(*(first + 1)))
is assigned to*(result + 1)
, and so on. The transform scan operation is permitted to be in-place.The following code snippet demonstrates how to use
transform_inclusive_scan
- Return
The end of the output sequence.
- Pre
first
may equalresult
, but the range[first, last)
and the range[result, result + (last - first))
shall not overlap otherwise.- Parameters
first
: The beginning of the input sequence.last
: The end of the input sequence.result
: The beginning of the output sequence.unary_op
: The function used to tranform the input sequence.binary_op
: The associatve operator used to ‘sum’ transformed values.
- Template Parameters
InputIterator
: is a model of Input Iterator andInputIterator's
value_type
is convertible tounary_op's
input type.OutputIterator
: is a model of Output Iterator.UnaryFunction
: is a model of Unary Function and accepts inputs ofInputIterator's
value_type
.UnaryFunction's
result_type is convertable toOutputIterator's
value_type
.AssociativeOperator
: is a model of Binary Function andAssociativeOperator's
result_type
is convertible toOutputIterator's
value_type
.
#include <thrust/transform_scan.h> int data[6] = {1, 0, 2, 2, 1, 3}; thrust::negate<int> unary_op; thrust::plus<int> binary_op; thrust::transform_inclusive_scan(data, data + 6, data, unary_op, binary_op); // in-place scan // data is now {-1, -1, -3, -5, -6, -9}
- See
transform
- See
inclusive_scan