Template Function thrust::exclusive_scan(InputIterator, InputIterator, OutputIterator, T, AssociativeOperator)¶
Function Documentation¶
-
template<typename
InputIterator
, typenameOutputIterator
, typenameT
, typenameAssociativeOperator
>
OutputIteratorthrust
::
exclusive_scan
(InputIterator first, InputIterator last, OutputIterator result, T init, AssociativeOperator binary_op) exclusive_scan
computes an exclusive prefix sum operation. The term ‘exclusive’ means that each result does not include the corresponding input operand in the partial sum. More precisely,init
is assigned to*result
and the valuebinary_op(init, *first)
is assigned to*(result + 1)
, and so on. This version of the function requires both an associative operator and an initial valueinit
. When the input and output sequences are the same, the scan is performed in-place.The following code snippet demonstrates how to use
exclusive_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.init
: The initial value.binary_op
: The associatve operator used to ‘sum’ values.
- Template Parameters
InputIterator
: is a model of Input Iterator andInputIterator's
value_type
is convertible toOutputIterator's
value_type
.OutputIterator
: is a model of Output Iterator andOutputIterator's
value_type
is convertible to bothAssociativeOperator's
first_argument_type
andsecond_argument_type
.T
: is convertible toOutputIterator's
value_type
.AssociativeOperator
: is a model of Binary Function andAssociativeOperator's
result_type
is convertible toOutputIterator's
value_type
.
#include <thrust/scan.h> #include <thrust/functional.h> int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8}; thrust::maximum<int> binary_op; thrust::exclusive_scan(data, data + 10, data, 1, binary_op); // in-place scan // data is now {1, 1, 1, 2, 2, 2, 4, 4, 4, 4 }