thrust

Functions  
template<typename DerivedPolicy , typename InputIterator , typename OutputIterator , typename UnaryFunction , typename AssociativeOperator >  
__host__ __device__ OutputIterator  thrust::transform_inclusive_scan (const thrust::detail::execution_policy_base< DerivedPolicy > &exec, InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_op, AssociativeOperator binary_op) 
template<typename InputIterator , typename OutputIterator , typename UnaryFunction , typename AssociativeOperator >  
OutputIterator  thrust::transform_inclusive_scan (InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_op, AssociativeOperator binary_op) 
template<typename DerivedPolicy , typename InputIterator , typename OutputIterator , typename UnaryFunction , typename T , typename AssociativeOperator >  
__host__ __device__ OutputIterator  thrust::transform_exclusive_scan (const thrust::detail::execution_policy_base< DerivedPolicy > &exec, InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_op, T init, AssociativeOperator binary_op) 
template<typename InputIterator , typename OutputIterator , typename UnaryFunction , typename T , typename AssociativeOperator >  
OutputIterator  thrust::transform_exclusive_scan (InputIterator first, InputIterator last, OutputIterator result, UnaryFunction unary_op, T init, AssociativeOperator binary_op) 
__host__ __device__ OutputIterator thrust::transform_exclusive_scan  (  const thrust::detail::execution_policy_base< DerivedPolicy > &  exec, 
InputIterator  first,  
InputIterator  last,  
OutputIterator  result,  
UnaryFunction  unary_op,  
T  init,  
AssociativeOperator  binary_op  
) 
transform_exclusive_scan
fuses the transform
and exclusive_scan
operations. transform_exclusive_scan
is equivalent to performing a tranformation defined by unary_op
into a temporary sequence and then performing an exclusive_scan
on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. In transform_exclusive_scan
, init
is assigned to *result
and the result of binary_op(init, unary_op(*first))
is assigned to *(result + 1)
, and so on. The transform scan operation is permitted to be inplace.
The algorithm's execution is parallelized as determined by exec
.
exec  The execution policy to use for parallelization. 
first  The beginning of the input sequence. 
last  The end of the input sequence. 
result  The beginning of the output sequence. 
unary_op  The function used to tranform the input sequence. 
init  The initial value of the exclusive_scan 
binary_op  The associatve operator used to 'sum' transformed values. 
DerivedPolicy  The name of the derived execution policy. 
InputIterator  is a model of Input Iterator and InputIterator's value_type is convertible to unary_op's input type. 
OutputIterator  is a model of Output Iterator. 
UnaryFunction  is a model of Unary Function and accepts inputs of InputIterator's value_type . UnaryFunction's result_type is convertable to OutputIterator's value_type . 
T  is convertible to OutputIterator's value_type . 
AssociativeOperator  is a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type . 
first
may equal result
, but the range [first, last)
and the range [result, result + (last  first))
shall not overlap otherwise.The following code snippet demonstrates how to use transform_exclusive_scan
using the thrust::host
execution policy for parallelization:
transform
exclusive_scan
OutputIterator thrust::transform_exclusive_scan  (  InputIterator  first, 
InputIterator  last,  
OutputIterator  result,  
UnaryFunction  unary_op,  
T  init,  
AssociativeOperator  binary_op  
) 
transform_exclusive_scan
fuses the transform
and exclusive_scan
operations. transform_exclusive_scan
is equivalent to performing a tranformation defined by unary_op
into a temporary sequence and then performing an exclusive_scan
on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. In transform_exclusive_scan
, init
is assigned to *result
and the result of binary_op(init, unary_op(*first))
is assigned to *(result + 1)
, and so on. The transform scan operation is permitted to be inplace.
first  The beginning of the input sequence. 
last  The end of the input sequence. 
result  The beginning of the output sequence. 
unary_op  The function used to tranform the input sequence. 
init  The initial value of the exclusive_scan 
binary_op  The associatve operator used to 'sum' transformed values. 
InputIterator  is a model of Input Iterator and InputIterator's value_type is convertible to unary_op's input type. 
OutputIterator  is a model of Output Iterator. 
UnaryFunction  is a model of Unary Function and accepts inputs of InputIterator's value_type . UnaryFunction's result_type is convertable to OutputIterator's value_type . 
T  is convertible to OutputIterator's value_type . 
AssociativeOperator  is a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type . 
first
may equal result
, but the range [first, last)
and the range [result, result + (last  first))
shall not overlap otherwise.The following code snippet demonstrates how to use transform_exclusive_scan
transform
exclusive_scan
__host__ __device__ OutputIterator thrust::transform_inclusive_scan  (  const thrust::detail::execution_policy_base< DerivedPolicy > &  exec, 
InputIterator  first,  
InputIterator  last,  
OutputIterator  result,  
UnaryFunction  unary_op,  
AssociativeOperator  binary_op  
) 
transform_inclusive_scan
fuses the transform
and inclusive_scan
operations. transform_inclusive_scan
is equivalent to performing a tranformation defined by unary_op
into a temporary sequence and then performing an inclusive_scan
on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. In transform_inclusive_scan
, unary_op(*first)
is assigned to *result
and the result of binary_op(unary_op(*first), unary_op(*(first + 1)))
is assigned to *(result + 1)
, and so on. The transform scan operation is permitted to be inplace.
The algorithm's execution is parallelized as determined by exec
.
exec  The execution policy to use for parallelization. 
first  The beginning of the input sequence. 
last  The end of the input sequence. 
result  The beginning of the output sequence. 
unary_op  The function used to tranform the input sequence. 
binary_op  The associatve operator used to 'sum' transformed values. 
DerivedPolicy  The name of the derived execution policy. 
InputIterator  is a model of Input Iterator and InputIterator's value_type is convertible to unary_op's input type. 
OutputIterator  is a model of Output Iterator. 
UnaryFunction  is a model of Unary Function and accepts inputs of InputIterator's value_type . UnaryFunction's result_type is convertable to OutputIterator's value_type . 
AssociativeOperator  is a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type . 
first
may equal result
, but the range [first, last)
and the range [result, result + (last  first))
shall not overlap otherwise.The following code snippet demonstrates how to use transform_inclusive_scan
using the thrust::host
execution policy for parallelization:
transform
inclusive_scan
OutputIterator thrust::transform_inclusive_scan  (  InputIterator  first, 
InputIterator  last,  
OutputIterator  result,  
UnaryFunction  unary_op,  
AssociativeOperator  binary_op  
) 
transform_inclusive_scan
fuses the transform
and inclusive_scan
operations. transform_inclusive_scan
is equivalent to performing a tranformation defined by unary_op
into a temporary sequence and then performing an inclusive_scan
on the tranformed sequence. In most cases, fusing these two operations together is more efficient, since fewer memory reads and writes are required. In transform_inclusive_scan
, unary_op(*first)
is assigned to *result
and the result of binary_op(unary_op(*first), unary_op(*(first + 1)))
is assigned to *(result + 1)
, and so on. The transform scan operation is permitted to be inplace.
first  The beginning of the input sequence. 
last  The end of the input sequence. 
result  The beginning of the output sequence. 
unary_op  The function used to tranform the input sequence. 
binary_op  The associatve operator used to 'sum' transformed values. 
InputIterator  is a model of Input Iterator and InputIterator's value_type is convertible to unary_op's input type. 
OutputIterator  is a model of Output Iterator. 
UnaryFunction  is a model of Unary Function and accepts inputs of InputIterator's value_type . UnaryFunction's result_type is convertable to OutputIterator's value_type . 
AssociativeOperator  is a model of Binary Function and AssociativeOperator's result_type is convertible to OutputIterator's value_type . 
first
may equal result
, but the range [first, last)
and the range [result, result + (last  first))
shall not overlap otherwise.The following code snippet demonstrates how to use transform_inclusive_scan
transform
inclusive_scan