next up previous index
Next: Calculate the inner Up: Generalized numeric operations Previous: Generalized numeric operations

Accumulate all elements in a sequence

Source code

Declaration

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);

Description    For the sequence in the range [ first, last) , the first accumulate  function returns

and the second accumulate  function returns . The first function may be used to sum  the elements in a sequence, and the second function may be used more generally to accumulate  the elements of a sequence using some binary function.

Type requirements

Group Generalized numeric operations.

Time complexity Linear.

The number of applications of operator+ or the function object binary_op is n, where n is the size of the range [ first, last) .

Space complexity Constant.

Mutative? No.

Details Returns init if first = last. Assumes that binary_op does not cause side effects .

Glossary terms BinaryOperation, constant space, dereference type, function object, function object type, InputIterator, iterator, linear time, mutative, operator+, range, sequence, side effect.

Example Select here to view the source code for the example.

 

Implementation Select here to view source code (Copyright (C) 1994, Hewlett-Packard Company) for this algorithm.

Implementation notes accumulate  is similar to the APL reduction  operator and the Common Lisp reduce  function, but it avoids the difficulty of defining the result of reduction  on an empty sequence  by always requiring an initial value.

Accumulation   is done by adding  each value (or performing the specified binary operation), in order, to the initial value to create a modified initial value.



next up previous index
Next: Calculate the inner Up: Generalized numeric operations Previous: Generalized numeric operations



Kenny Zalewski
Mon May 13 04:03:40 EDT 1996