Template Function thrust::scatter_if(InputIterator1, InputIterator1, InputIterator2, InputIterator3, RandomAccessIterator, Predicate)¶
Function Documentation¶
-
template<typename
InputIterator1
, typenameInputIterator2
, typenameInputIterator3
, typenameRandomAccessIterator
, typenamePredicate
>
voidthrust
::
scatter_if
(InputIterator1 first, InputIterator1 last, InputIterator2 map, InputIterator3 stencil, RandomAccessIterator output, Predicate pred) scatter_if
conditionally copies elements from a source range into an output array according to a map. For each iteratori
in the range[first, last)
such thatpred(*(stencil + (i - first)))
istrue
, the value*i
is assigned tooutput[*(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.#include <thrust/scatter.h> struct is_even { __host__ __device__ bool operator()(int x) { return (x % 2) == 0; } }; ... 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] = {2, 1, 2, 1, 2, 1, 2, 1}; int D[8] = {0, 0, 0, 0, 0, 0, 0, 0}; is_even pred; thrust::scatter_if(V, V + 8, M, S, D, pred); // D contains [10, 30, 50, 70, 0, 0, 0, 0];
- Pre
The iterator
result + i
shall not refer to any element referenced by any iteratorj
in the range[first,last)
for all iteratorsi
in the range[map,map + (last - first))
.- Pre
The iterator
result + i
shall not refer to any element referenced by any iteratorj
in the range[map,map + (last - first))
for all iteratorsi
in the range[map,map + (last - first))
.- Pre
The iterator
result + i
shall not refer to any element referenced by any iteratorj
in the range[stencil,stencil + (last - first))
for all iteratorsi
in the range[map,map + (last - first))
.- Pre
The expression
result[*i]
shall be valid for all iteratorsi
in the range[map,map + (last - first))
for which the following condition holds:pred(*(stencil + i)) != false
.- Parameters
first
: Beginning of the sequence of values to scatter.last
: End of the sequence of values to scatter.map
: Beginning of the sequence of output indices.stencil
: Beginning of the sequence of predicate values.output
: Beginning of the destination range.pred
: Predicate to apply to the stencil values.
- Template Parameters
InputIterator1
: must be a model of Input Iterator andInputIterator1's
value_type
must be convertible toRandomAccessIterator's
value_type
.InputIterator2
: must be a model of Input Iterator andInputIterator2's
value_type
must be convertible toRandomAccessIterator's
difference_type
.InputIterator3
: must be a model of Input Iterator andInputIterator3's
value_type
must be convertible toPredicate's
argument_type
.RandomAccessIterator
: must be a model of Random Access iterator.Predicate
: must be a model of Predicate.
- Note
scatter_if
is the inverse of thrust::gather_if.