template<typename InputIterator1 , typename InputIterator2 , typename ForwardIterator , typename UnaryFunction , typename Predicate >
ForwardIterator thrust::transform_if |
( |
InputIterator1 |
first, |
|
|
InputIterator1 |
last, |
|
|
InputIterator2 |
stencil, |
|
|
ForwardIterator |
result, |
|
|
UnaryFunction |
op, |
|
|
Predicate |
pred |
|
) |
| |
This version of transform_if
conditionally 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 a stencil sequence satisfies a predicate. Otherwise, the corresponding position in the output sequence is not modified.
Specifically, for each iterator i
in the range [first, last)
the predicate pred(*s)
is evaluated, where s
is the corresponding input iterator in the range [stencil, stencil + (last - first) )
. If this predicate evaluates to true
, the result of op(*i)
is assigned to *o
, where o
is 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.
- Parameters
-
first | The beginning of the input sequence. |
last | The end of the input sequence. |
stencil | The beginning of the stencil sequence. |
result | The beginning of the output sequence. |
op | The tranformation operation. |
pred | The predicate operation. |
- Returns
- The end of the output sequence.
- Template Parameters
-
InputIterator1 | is a model of Input Iterator and InputIterator1's value_type is convertible to UnaryFunction's argument_type . |
InputIterator2 | is a model of Input Iterator and InputIterator2's value_type is convertible to Predicate's argument_type . |
ForwardIterator | is a model of Forward Iterator. |
UnaryFunction | is a model of Unary Function and UnaryFunction's result_type is convertible to OutputIterator's value_type . |
Predicate | is a model of Predicate. |
- Precondition
first
may equal result
, but the range [first, last)
shall not overlap the range [result, result + (last - first))
otherwise.
-
stencil
may equal result
, but the range [stencil, stencil + (last - first))
shall not overlap the range [result, result + (last - first))
otherwise.
The following code snippet demonstrates how to use transform_if:
int data[10] = {-5, 0, 2, -3, 2, 4, 0, -1, 2, 8};
int stencil[10] = { 1, 0, 1, 0, 1, 0, 1, 0, 1, 0};
- See also
- thrust::transform