thrust::copy_if
Defined in thrust/copy.h
- 
template<typename InputIterator1, typename InputIterator2, typename OutputIterator, typename Predicate>
 OutputIterator thrust::copy_if(InputIterator1 first, InputIterator1 last, InputIterator2 stencil, OutputIterator result, Predicate pred)
- This version of - copy_ifcopies elements from the range- [first,last)to a range beginning at- result, except that any element whose corresponding stencil element causes- predto be- falseis not copied.- copy_ifis stable, meaning that the relative order of elements that are copied is unchanged.- More precisely, for every integer - nsuch that- 0 <= n < last-first,- copy_ifperforms the assignment- *result = *(first+n)and- resultis advanced one position if- pred(*(stencil+n)). Otherwise, no assignment occurs and- resultis not advanced.- The following code snippet demonstrates how to use - copy_ifto perform stream compaction to copy numbers to an output range when corresponding stencil elements are even:- #include <thrust/copy.h> ... struct is_even { __host__ __device__ bool operator()(const int x) { return (x % 2) == 0; } }; ... int N = 6; int data[N] = { 0, 1, 2, 3, 4, 5}; int stencil[N] = {-2, 0, -1, 0, 1, 2}; int result[4]; thrust::copy_if(data, data + N, stencil, result, is_even()); // data remains = { 0, 1, 2, 3, 4, 5}; // stencil remains = {-2, 0, -1, 0, 1, 2}; // result is now { 0, 1, 3, 5} - See also - remove_copy_if- Parameters
- first – The beginning of the sequence from which to copy. 
- last – The end of the sequence from which to copy. 
- stencil – The beginning of the stencil sequence. 
- result – The beginning of the sequence into which to copy. 
- pred – The predicate to test on every value of the range - [stencil, stencil + (last-first)).
 
- Template Parameters
- InputIterator1 – is a model of Input Iterator. 
- InputIterator2 – is a model of Input Iterator, and - InputIterator2's- value_typeis convertible to- Predicate'sargument type.
- OutputIterator – is a model of Output Iterator. 
- Predicate – is a model of Predicate. 
 
- Returns
- result + n, where- nis equal to the number of times- predevaluated to- truein the range- [stencil, stencil + (last-first)).
- Pre
- The ranges - [first, last)and- [result, result + (last - first))shall not overlap.
- Pre
- The ranges - [stencil, stencil + (last - first))and- [result, result + (last - first))shall not overlap.