29 Numerics library [numerics]

29.8 Generalized numeric operations [numeric.ops]

29.8.2 Accumulate [accumulate]

template <class InputIterator, class T> T accumulate(InputIterator first, InputIterator last, T init); template <class InputIterator, class T, class BinaryOperation> T accumulate(InputIterator first, InputIterator last, T init, BinaryOperation binary_op);

Requires: T должны соответствовать требованиям CopyConstructible и CopyAssignable типам. В пределах [first, last], binary_­op не должны ни изменять элементы , ни к аннулированию итератора или поддиапазоны.281

Effects: Вычисляет свой результат, инициализируя аккумулятор acc начальным значением, init а затем изменяет его с помощью acc = acc + *i или acc = binary_­op(acc, *i) для каждого итератора i в диапазоне [first, last) по порядку.282

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

accumulate аналогичен оператору сокращения APL и функции сокращения Common Lisp, но позволяет избежать трудности определения результата сокращения для пустой последовательности, всегда требуя начального значения.