thrust

◆ exclusive_scan_by_key() [2/8]

template<typename InputIterator1 , typename InputIterator2 , typename OutputIterator >
OutputIterator thrust::exclusive_scan_by_key ( InputIterator1  first1,
InputIterator1  last1,
InputIterator2  first2,
OutputIterator  result 
)

exclusive_scan_by_key computes an exclusive segmented prefix

This version of exclusive_scan_by_key uses the value 0 to initialize the exclusive scan operation.

This version of exclusive_scan_by_key assumes plus as the associative operator used to perform the prefix sum. When the input and output sequences are the same, the scan is performed in-place.

This version of exclusive_scan_by_key assumes equal_to as the binary predicate used to compare adjacent keys. Specifically, consecutive iterators i and i+1 in the range [first1, last1 belong to the same segment if *i == *(i+1), and belong to different segments otherwise.

Refer to the most general form of exclusive_scan_by_key for additional details.

Parameters
first1The beginning of the key sequence.
last1The end of the key sequence.
first2The beginning of the input value sequence.
resultThe beginning of the output value sequence.
Precondition
first1 may equal result but the range [first1, last1) and the range [result, result + (last1 - first1)) shall not overlap otherwise.
first2 may equal result but the range [first2, first2 + (last1 - first1) and range [result, result + (last1 - first1)) shall not overlap otherwise.

The following code snippet demonstrates how to use exclusive_scan_by_key.

#include <thrust/scan.h>
int keys[10] = {0, 0, 0, 1, 1, 2, 3, 3, 3, 3};
int vals[10] = {1, 1, 1, 1, 1, 1, 1, 1, 1, 1};
thrust::exclusive_scan_by_key(key, key + 10, vals, vals); // in-place scan
// vals is now {0, 1, 2, 0, 1, 0, 0, 1, 2, 3};
See also
exclusive_scan