Template Function thrust::transform_if(InputIterator, InputIterator, ForwardIterator, UnaryFunction, Predicate)¶
Function Documentation¶
-
template<typename
InputIterator, typenameForwardIterator, typenameUnaryFunction, typenamePredicate>
ForwardIteratorthrust::transform_if(InputIterator first, InputIterator last, ForwardIterator result, UnaryFunction op, Predicate pred) This version of
transform_ifconditionally applies a unary function to each element of an input sequence and stores the result in the corresponding position in an output sequence if the corresponding position in the input sequence satifies a predicate. Otherwise, the corresponding position in the output sequence is not modified.Specifically, for each iterator
iin the range[first, last)the predicatepred(*i)is evaluated. If this predicate evaluates totrue, the result ofop(*i)is assigned to*o, whereois the corresponding output iterator in the range[result, result + (last - first) ). Otherwise,op(*i)is not evaluated and no assignment occurs. The input and output sequences may coincide, resulting in an in-place transformation.The following code snippet demonstrates how to use
transform_if:- Return
The end of the output sequence.
- Pre
firstmay equalresult, but the range[first, last)shall not overlap the range[result, result + (last - first))otherwise.- Parameters
first: The beginning of the input sequence.last: The end of the input sequence.result: The beginning of the output sequence.op: The tranformation operation.pred: The predicate operation.
- Template Parameters
InputIterator: is a model of Input Iterator, andInputIterator'svalue_typeis convertible toPredicate'sargument_type, andInputIterator'svalue_typeis convertible toUnaryFunction'sargument_type.ForwardIterator: is a model of Forward Iterator.UnaryFunction: is a model of Unary Function andUnaryFunction'sresult_typeis convertible toOutputIterator'svalue_type.Predicate: is a model of Predicate.
#include <thrust/transform.h> #include <thrust/functional.h> int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8}; struct is_odd { __host__ __device__ bool operator()(int x) { return x % 2; } }; thrust::negate<int> op; thrust::identity<int> identity; // negate odd elements thrust::transform_if(data, data + 10, data, op, is_odd()); // in-place transformation // data is now {5, 0, 2, 3, 2, 4, 0, 1, 2, 8};
- See
thrust::transform