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, 0
is assigned to *result
and the sum of 0
and *first
is assigned to *(result + 1)
, and so on. This version of exclusive_scan
assumes plus as the associative operator and 0
as the initial value. 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 algorithm's execution is parallelized as determined by exec
.
- Parameters
-
exec | The execution policy to use for parallelization. |
first | The beginning of the input sequence. |
last | The end of the input sequence. |
result | The beginning of the output sequence. |
- Returns
- The end of the output sequence.
- Template Parameters
-
DerivedPolicy | The name of the derived execution policy. |
InputIterator | is a model of Input Iterator and InputIterator's value_type is convertible to OutputIterator's value_type . |
OutputIterator | is a model of Output Iterator, and if x and y are objects of OutputIterator's value_type , then x + y is defined. If T is OutputIterator's value_type , then T(0) is defined. |
- 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 exclusive_scan
to compute an in-place prefix sum using the thrust::host
execution policy for parallelization:
#include <thrust/scan.h>
...
int data[6] = {1, 0, 2, 2, 1, 3};
- See also
- https://en.cppreference.com/w/cpp/algorithm/partial_sum