thrust

◆ scatter_if() [2/4]

template<typename InputIterator1 , typename InputIterator2 , typename InputIterator3 , typename RandomAccessIterator >
void thrust::scatter_if ( InputIterator1  first,
InputIterator1  last,
InputIterator2  map,
InputIterator3  stencil,
RandomAccessIterator  output 
)

scatter_if conditionally copies elements from a source range into an output array according to a map. For each iterator i in the range [first, last) such that *(stencil + (i - first)) is true, the value *i is assigned to output[*(map + (i - first))]. The output iterator must permit random access. If the same index appears more than once in the range [map, map + (last - first)) the result is undefined.

Parameters
firstBeginning of the sequence of values to scatter.
lastEnd of the sequence of values to scatter.
mapBeginning of the sequence of output indices.
stencilBeginning of the sequence of predicate values.
outputBeginning of the destination range.
Template Parameters
InputIterator1must be a model of Input Iterator and InputIterator1's value_type must be convertible to RandomAccessIterator's value_type.
InputIterator2must be a model of Input Iterator and InputIterator2's value_type must be convertible to RandomAccessIterator's difference_type.
InputIterator3must be a model of Input Iterator and InputIterator3's value_type must be convertible to bool.
RandomAccessIteratormust be a model of Random Access iterator.
Precondition
The iterator result + i shall not refer to any element referenced by any iterator j in the range [first,last) for all iterators i in the range [map,map + (last - first)).
The iterator result + i shall not refer to any element referenced by any iterator j in the range [map,map + (last - first)) for all iterators i in the range [map,map + (last - first)).
The iterator result + i shall not refer to any element referenced by any iterator j in the range [stencil,stencil + (last - first)) for all iterators i in the range [map,map + (last - first)).
The expression result[*i] shall be valid for all iterators i in the range [map,map + (last - first)) for which the following condition holds: *(stencil + i) != false.
#include <thrust/scatter.h>
...
int V[8] = {10, 20, 30, 40, 50, 60, 70, 80};
int M[8] = {0, 5, 1, 6, 2, 7, 3, 4};
int S[8] = {1, 0, 1, 0, 1, 0, 1, 0};
int D[8] = {0, 0, 0, 0, 0, 0, 0, 0};
thrust::scatter_if(V, V + 8, M, S, D);
// D contains [10, 30, 50, 70, 0, 0, 0, 0];
Note
scatter_if is the inverse of thrust::gather_if.