thrust::remove_if
Defined in thrust/remove.h
- 
template<typename DerivedPolicy, typename ForwardIterator, typename Predicate>
 ForwardIterator thrust::remove_if(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, ForwardIterator first, ForwardIterator last, Predicate pred)
- remove_ifremoves from the range- [first, last)every element- xsuch that- pred(x)is- true. That is,- remove_ifreturns an iterator- new_lastsuch that the range- [first,new_last)contains no elements for which- predis- true. The iterators in the range- [new_last,last)are all still dereferenceable, but the elements that they point to are unspecified.- remove_ifis stable, meaning that the relative order of elements that are not removed is unchanged.- The algorithm’s execution is parallelized as determined by - exec.- The following code snippet demonstrates how to use - remove_ifto remove all even numbers from an array of integers using the- thrust::hostexecution policy for parallelization:- #include <thrust/remove.h> #include <thrust/execution_policy.h> ... struct is_even { __host__ __device__ bool operator()(const int x) { return (x % 2) == 0; } }; ... const int N = 6; int A[N] = {1, 4, 2, 8, 5, 7}; int *new_end = thrust::remove_if(thrust::host, A, A + N, is_even()); // The first three values of A are now {1, 5, 7} // Values beyond new_end are unspecified - See also - remove - See also - remove_copy - See also - remove_copy_if - Note - The meaning of “removal” is somewhat subtle. - remove_ifdoes not destroy any iterators, and does not change the distance between- firstand- last. (There’s no way that it could do anything of the sort.) So, for example, if- Vis a device_vector,- remove_if(V.begin(), V.end(), pred)does not change- V.size():- Vwill contain just as many elements as it did before.- remove_ifreturns an iterator that points to the end of the resulting range after elements have been removed from it; it follows that the elements after that iterator are of no interest, and may be discarded. If you are removing elements from a Sequence, you may simply erase them. That is, a reasonable way of removing elements from a Sequence is- S.erase(remove_if(S.begin(), S.end(), pred), S.end()).- Parameters
- exec – The execution policy to use for parallelization. 
- first – The beginning of the range of interest. 
- last – The end of the range of interest. 
- pred – A predicate to evaluate for each element of the range - [first,last). Elements for which- predevaluates to- trueare removed from the sequence.
 
- Template Parameters
- DerivedPolicy – The name of the derived execution policy. 
- ForwardIterator – is a model of Forward Iterator, - ForwardIteratoris mutable, and- ForwardIterator's- value_typeis convertible to- Predicate'sargument type.
- Predicate – is a model of Predicate. 
 
- Returns
- A ForwardIterator pointing to the end of the resulting range of elements for which - predevaluated to- true.