29 Numerics library [numerics]

29.8 Generalized numeric operations [numeric.ops]

29.8.4 Inner product [inner.product]

template <class InputIterator1, class InputIterator2, class T> T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init); template <class InputIterator1, class InputIterator2, class T, class BinaryOperation1, class BinaryOperation2> T inner_product(InputIterator1 first1, InputIterator1 last1, InputIterator2 first2, T init, BinaryOperation1 binary_op1, BinaryOperation2 binary_op2);

Requires: T должны соответствовать требованиям CopyConstructible и CopyAssignable типам. В диапазонах [first1, last1] и [first2, first2 + (last1 - first1)] binary_­op1 и binary_­op2 не должны изменять элементы или делать недействительными итераторы или поддиапазоны.283

Effects: Вычисляет свой результат, инициализируя аккумулятор acc начальным значением, init а затем изменяя его с помощью acc = acc + (*i1) * (*i2) или acc = binary_­op1(acc, binary_­op2(*i1, *i2)) для каждого итератора i1 в диапазоне [first1, last1) и итератора i2 в диапазоне [first2, first2 + (last1 - first1)) по порядку.

Использование полностью замкнутых диапазонов является преднамеренным.