Defined in header
<numeric> | ||
---|---|---|
template< class InputIt, class OutputIt, class UnaryOperation, class BinaryOperation > OutputIt transform_inclusive_scan( InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op, BinaryOperation binary_op ); | (1) | (since C++17) |
template< class ExecutionPolicy, class InputIt, class OutputIt, class UnaryOperation, class BinaryOperation > OutputIt transform_inclusive_scan( ExecutionPolicy&& policy, InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op, BinaryOperation binary_op ); | (2) | (since C++17) |
template< class InputIt, class OutputIt, class UnaryOperation, class BinaryOperation, class T > OutputIt transform_inclusive_scan( InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op, BinaryOperation binary_op, T init ); | (3) | (since C++17) |
template< class ExecutionPolicy, class InputIt, class OutputIt, class UnaryOperation, class BinaryOperation, class T > OutputIt transform_inclusive_scan( ExecutionPolicy&& policy, InputIt first, InputIt last, OutputIt d_first, UnaryOperation unary_op, BinaryOperation binary_op, T init ); | (4) | (since C++17) |
Transforms each element in the range [first, last)
with unary_op
, then computes an inclusive prefix sum operation using binary_op
over the resulting range, optionally with init
as the initial value, and writes the results to the range beginning at d_first
. "inclusive" means that the i-th input element is included in the i-th sum.
Formally, assigns through each iterator i
in [d_first, d_first + (last - first)) the value of.
unary_op(*j)...
for every j
in [first, first + (i - d_first + 1)) over binary_op
, init, unary_op(*j)...
for every j
in [first, first + (i - d_first + 1)) over binary_op
, where generalized noncommutative sum GNSUM(op, a
1, ..., a
N) is defined as follows:
In other words, the summation operations may be performed in arbitrary order, and the behavior is nondeterministic if binary_op
is not associative.
Overloads (2, 4) are executed according to policy
, and do not participate in overload resolution unless std::is_execution_policy_v<std::decay_t<ExecutionPolicy>>
is true.
unary_op
and binary_op
shall not invalidate iterators or subranges, nor modify elements in the ranges [first, last) or [d_first, d_first + (last - first)). Otherwise, the behavior is undefined.
first, last | - | the range of elements to sum |
d_first | - | the beginning of the destination range; may be equal to first |
policy | - | the execution policy to use. See execution policy for details. |
init | - | the initial value |
unary_op | - | unary FunctionObject that will be applied to each element of the input range. The return type must be acceptable as input to binary_op . |
binary_op | - | binary FunctionObject that will be applied in to the result of unary_op , the results of other binary_op , and init if provided. |
Type requirements | ||
-
InputIt must meet the requirements of InputIterator . |
||
-
OutputIt must meet the requirements of OutputIterator . |
Iterator to the element past the last element written.
O(last - first) applications of each of binary_op
and unary_op
.
The overloads with a template parameter named ExecutionPolicy
report errors as follows:
std::terminate
is called. std::bad_alloc
is thrown. unary_op
is not applied to init
.
computes the partial sum of a range of elements (function template) |
|
applies a function to a range of elements (function template) |
|
(C++17)
| similar to std::partial_sum , includes the ith input element in the ith sum (function template) |
(C++17)
| applies a functor, then calculates exclusive scan (function template) |
© cppreference.com
Licensed under the Creative Commons Attribution-ShareAlike Unported License v3.0.
http://en.cppreference.com/w/cpp/algorithm/transform_inclusive_scan