thrust

◆ exclusive_scan() [2/6]

template<typename InputIterator , typename OutputIterator >
OutputIterator thrust::exclusive_scan ( InputIterator  first,
InputIterator  last,
OutputIterator  result 
)

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.

Parameters
firstThe beginning of the input sequence.
lastThe end of the input sequence.
resultThe beginning of the output sequence.
Returns
The end of the output sequence.
Template Parameters
InputIteratoris a model of Input Iterator and InputIterator's value_type is convertible to OutputIterator's value_type.
OutputIteratoris 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

#include <thrust/scan.h>
int data[6] = {1, 0, 2, 2, 1, 3};
thrust::exclusive_scan(data, data + 6, data); // in-place scan
// data is now {0, 1, 1, 3, 5, 6}
See also
http://www.sgi.com/tech/stl/partial_sum.html