thrust::inclusive_scan
Defined in thrust/scan.h
-
template<typename InputIterator, typename OutputIterator, typename T, typename AssociativeOperator>
OutputIterator thrust::inclusive_scan(InputIterator first, InputIterator last, OutputIterator result, T init, AssociativeOperator binary_op) inclusive_scan
computes an inclusive prefix sum operation. The term ‘inclusive’ means that each result includes the corresponding input operand in the partial sum. More precisely,binary_op(init, *first)
is assigned to*result
and so on. This version ofinclusive_scan
requires both an associative operator and an initial valueinit
. When the input and output sequences are the same, the scan is performed in-place.Results are not deterministic for pseudo-associative operators (e.g., addition of floating-point types). Results for pseudo-associative operators may vary from run to run.
The following code snippet demonstrates how to use
inclusive_scan
with initial value:int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8}; thrust::maximum<int> binary_op; thrust::inclusive_scan(data, data + 10, data, 1, thrust::maximum<>{}); // in-place scan // data is now {1, 1, 2, 2, 2, 4, 4, 4, 4, 8}
- 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 associative operator used to ‘sum’ values.
- Template Parameters
InputIterator – is a model of Input Iterator and
InputIterator's
value_type
is convertible toOutputIterator's
value_type
.OutputIterator – is a model of Output Iterator and
OutputIterator's
value_type
is convertible to bothAssociativeOperator's
first_argument_type
andsecond_argument_type
.T – is convertible to
OutputIterator's
value_type
.AssociativeOperator – is a model of Binary Function and
AssociativeOperator's
result_type
is convertible toOutputIterator's
value_type
.
- Returns
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.