thrust::transform_if
Defined in thrust/transform.h
- 
template<typename DerivedPolicy, typename InputIterator1, typename InputIterator2, typename InputIterator3, typename ForwardIterator, typename BinaryFunction, typename Predicate>
 ForwardIterator thrust::transform_if(const thrust::detail::execution_policy_base<DerivedPolicy> &exec, InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, InputIterator3 stencil, ForwardIterator result, BinaryFunction binary_op, Predicate pred)
- This version of - transform_ifconditionally applies a binary function to each pair of elements from two input sequences 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 - iin the range- [first1, last1)and- j = first2 + (i - first1)in the range- [first2, first2 + (last1 - first1) ), the predicate- pred(*s)is evaluated, where- sis the corresponding input iterator in the range- [stencil, stencil + (last1 - first1) ). If this predicate evaluates to- true, the result of- binary_op(*i,*j)is assigned to- *o, where- ois the corresponding output iterator in the range- [result, result + (last1 - first1) ). Otherwise,- binary_op(*i,*j)is not evaluated and no assignment occurs. The input and output sequences may coincide, resulting in an in-place transformation.- The algorithm’s execution is parallelized as determined by - exec.- The following code snippet demonstrates how to use - transform_ifusing the- thrust::hostexecution policy for parallelization:- #include <thrust/transform.h> #include <thrust/functional.h> #include <thrust/execution_policy.h> ... int input1[6] = {-5, 0, 2, 3, 2, 4}; int input2[6] = { 3, 6, -2, 1, 2, 3}; int stencil[8] = { 1, 0, 1, 0, 1, 0}; int output[6]; thrust::plus<int> op; ::cuda::std::identity identity; thrust::transform_if(thrust::host, input1, input1 + 6, input2, stencil, output, op, identity); // output is now {-2, 0, 0, 3, 4, 4}; - See also - thrust::transform - Parameters
- exec – The execution policy to use for parallelization. 
- first1 – The beginning of the first input sequence. 
- last1 – The end of the first input sequence. 
- first2 – The beginning of the second input sequence. 
- stencil – The beginning of the stencil sequence. 
- result – The beginning of the output sequence. 
- binary_op – The transformation operation. 
- pred – The predicate operation. Relying on the address of pred’s arguments in its implementation is deprecated. 
 
- Template Parameters
- DerivedPolicy – The name of the derived execution policy. 
- InputIterator1 – is a model of Input Iterator and - InputIterator1's- value_typeis convertible to- BinaryFunction'sfirst argument type.
- InputIterator2 – is a model of Input Iterator and - InputIterator2's- value_typeis convertible to- BinaryFunction'ssecond argument type.
- ForwardIterator – is a model of Forward Iterator. 
- BinaryFunction – The function’s return type must be convertible to - OutputIterator's- value_type.
- Predicate – is a model of Predicate. 
 
- Returns
- The end of the output sequence. 
- Pre
- first1may equal- result, but the range- [first1, last1)shall not overlap the range- [result, result + (last1 - first1))otherwise.
- Pre
- first2may equal- result, but the range- [first2, first2 + (last1 - first1))shall not overlap the range- [result, result + (last1 - first1))otherwise.
- Pre
- stencilmay equal- result, but the range- [stencil, stencil + (last1 - first1))shall not overlap the range- [result, result + (last1 - first1))otherwise.