thrust

◆ transform_inclusive_scan() [2/2]

template<typename InputIterator , typename OutputIterator , typename UnaryFunction , typename AssociativeOperator >
OutputIterator thrust::transform_inclusive_scan ( InputIterator  first,
InputIterator  last,
OutputIterator  result,
UnaryFunction  unary_op,
AssociativeOperator  binary_op 
)

transform_inclusive_scan fuses the transform and inclusive_scan operations. transform_inclusive_scan is equivalent to performing a tranformation defined by unary_op into a temporary sequence and then performing an inclusive_scan on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. In transform_inclusive_scan, unary_op(*first) is assigned to *result and the result of binary_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.

Parameters
firstThe beginning of the input sequence.
lastThe end of the input sequence.
resultThe beginning of the output sequence.
unary_opThe function used to tranform the input sequence.
binary_opThe associatve operator used to 'sum' transformed values.
Returns
The end of the output sequence.
Template Parameters
InputIteratoris a model of Input Iterator and InputIterator's value_type is convertible to unary_op's input type.
OutputIteratoris a model of Output Iterator.
UnaryFunctionis a model of Unary Function and accepts inputs of InputIterator's value_type. UnaryFunction's result_type is convertable to OutputIterator's value_type.
AssociativeOperatoris a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type.
Precondition
first may equal result, but the range [first, last) and the range [result, result + (last - first)) shall not overlap otherwise.

The following code snippet demonstrates how to use transform_inclusive_scan

int data[6] = {1, 0, 2, 2, 1, 3};
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 also
transform
inclusive_scan