std::inner_product (3) - Linux Manuals
std::inner_product: std::inner_product
NAME
std::inner_product - std::inner_product
Synopsis
Defined in header <numeric>
template< class InputIt1, class InputIt2, class T >
T inner_product( InputIt1 first1, InputIt1 last1, (1)
InputIt2 first2, T init );
template<class InputIt1, class InputIt2, class T,
class BinaryOperation1, class BinaryOperation2>
T inner_product( InputIt1 first1, InputIt1 last1, (2)
InputIt2 first2, T init,
BinaryOperation1 op1,
BinaryOperation2 op2 );
Computes inner product (i.e. sum of products) or performs ordered map/reduce operation on the range [first1, last1) and the range beginning at first2.
1) Initializes the accumulator acc with the initial value init and then
modifies it with the expression acc = acc + *first1 * *first2, then modifies again with the expression acc = acc + *(first1+1) * *(first2+1), etc (until C++20)
modifies it with the expression acc = std::move(acc) + *first1 * *first2, then modifies again with the expression acc = std::move(acc) + *(first1+1) * *(first2+1), etc (since C++20)
until reaching last1. For built-in meaning of + and *, this computes inner product of the two ranges.
2) Initializes the accumulator acc with the initial value init and then
modifies it with the expression acc = op1(acc, op2(*first1, *first2)), then modifies again with the expression acc = op1(acc, op2(*(first1+1), *(first2+1))), etc (until C++20)
modifies it with the expression acc = op1(std::move(acc), op2(*first1, *first2)), then modifies again with the expression acc = op1(std::move(acc), op2(*(first1+1), *(first2+1))), etc (since C++20)
until reaching last1.
op1 or op2 must not have side effects. (until C++11)
op1 or op2 must not invalidate any iterators, including the end iterators, or modify any elements of the range involved. (since C++11)
Parameters
first1, last1 - the first range of elements
first2 - the beginning of the second range of elements
init - initial value of the sum of the products
op1 - Ret fun(const Type1 &a, const Type2 &b);
op2 - Ret fun(const Type1 &a, const Type2 &b);
Type requirements
-
InputIt1, InputIt2 must meet the requirements of LegacyInputIterator.
-
ForwardIt1, ForwardIt2 must meet the requirements of LegacyForwardIterator.
-
T must meet the requirements of CopyAssignable and CopyConstructible.
Return value
The final value of acc as described above.
Possible implementation
First version
Second version