thrust::scatter_if
Defined in thrust/scatter.h
- 
template<typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename InputIterator3, typename RandomAccessIterator, typename Predicate>
 void thrust::scatter_if(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, InputIterator1 first, InputIterator1 last, InputIterator2 map, InputIterator3 stencil, RandomAccessIterator output, Predicate pred)
- scatter_ifconditionally copies elements from a source range into an output array according to a map. For each iterator- iin the range- [first, last)such that- pred(*(stencil + (i - first)))is- true, the value- *iis 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.- The algorithm’s execution is parallelized as determined by - exec.- #include <thrust/scatter.h> #include <thrust/execution_policy.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(thrust::host, V, V + 8, M, S, D, pred); // D contains [10, 30, 50, 70, 0, 0, 0, 0]; - Note - scatter_ifis the inverse of thrust::gather_if.- Parameters
- exec – The execution policy to use for parallelization. 
- 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
- DerivedPolicy – The name of the derived execution policy. 
- InputIterator1 – must be a model of Input Iterator and - InputIterator1's- value_typemust be convertible to- RandomAccessIterator's- value_type.
- InputIterator2 – must be a model of Input Iterator and - InputIterator2's- value_typemust be convertible to- RandomAccessIterator's- difference_type.
- InputIterator3 – must be a model of Input Iterator and - InputIterator3's- value_typemust be convertible to- Predicate'sargument type.
- RandomAccessIterator – must be a model of Random Access iterator. 
- Predicate – must be a model of Predicate. 
 
- Pre
- The iterator - result + ishall not refer to any element referenced by any iterator- jin the range- [first,last)for all iterators- iin the range- [map,map + (last - first)).
- Pre
- The iterator - result + ishall not refer to any element referenced by any iterator- jin the range- [map,map + (last - first))for all iterators- iin the range- [map,map + (last - first)).
- Pre
- The iterator - result + ishall not refer to any element referenced by any iterator- jin the range- [stencil,stencil + (last - first))for all iterators- iin the range- [map,map + (last - first)).
- Pre
- The expression - result[*i]shall be valid for all iterators- iin the range- [map,map + (last - first))for which the following condition holds:- pred(*(stencil + i)) != false.