thrust::inclusive_scan
Defined in thrust/scan.h
- 
template<typename InputIterator, typename OutputIterator>
 OutputIterator thrust::inclusive_scan(InputIterator first, InputIterator last, OutputIterator result)
- inclusive_scancomputes an inclusive prefix sum operation. The term ‘inclusive’ means that each result includes the corresponding input operand in the partial sum. More precisely,- *firstis assigned to- *resultand the sum of- *firstand- *(first + 1)is assigned to- *(result + 1), and so on. This version of- inclusive_scanassumes plus as the associative operator. When the input and output sequences are the same, the scan is performed in-place.- inclusive_scanis similar to- std::partial_sumin the STL. The primary difference between the two functions is that- std::partial_sumguarantees a serial summation order, while- inclusive_scanrequires associativity of the binary operation to parallelize the prefix sum.- 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- #include <thrust/scan.h> int data[6] = {1, 0, 2, 2, 1, 3}; thrust::inclusive_scan(data, data + 6, data); // in-place scan // data is now {1, 1, 3, 5, 6, 9} - Parameters
- first – The beginning of the input sequence. 
- last – The end of the input sequence. 
- result – The beginning of the output sequence. 
 
- Template Parameters
- InputIterator – is a model of Input Iterator and - InputIterator's- value_typeis convertible to- OutputIterator's- value_type.
- OutputIterator – is a model of Output Iterator, and if - xand- yare objects of- OutputIterator's- value_type, then- x + yis defined. If- Tis- OutputIterator's- value_type, then- T(0)is defined.
 
- Returns
- The end of the output sequence. 
- Pre
- firstmay equal- resultbut the range- [first, last)and the range- [result, result + (last - first))shall not overlap otherwise.