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 of inclusive_scan requires both an associative operator and an initial value init. 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 to OutputIterator's value_type.

  • OutputIterator – is a model of Output Iterator and OutputIterator's value_type is convertible to both AssociativeOperator's first_argument_type and second_argument_type.

  • T – is convertible to OutputIterator's value_type.

  • AssociativeOperator – is a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type.

Returns

The end of the output sequence.

Pre

first may equal result but the range [first, last) and the range [result, result + (last - first)) shall not overlap otherwise.