Apache C++ Standard Library Reference Guide

## accumulate()

Library: Numerics

    Function

- Local Index
- Summary
- Synopsis
- Description
- Complexity
- Example
- Standards Conformance

### Local Index

No Entries

### Summary

A generalized numeric operation that accumulates all elements within a range into a single value

### Synopsis

    #include <numeric>

    namespace std {
      template <class InputIterator, class T>
      T accumulate(InputIterator start,
                   InputIterator finish,
                   T init);

      template <class InputIterator,
                class T,
                class BinaryOperation>
      T accumulate(InputIterator start,
                   InputIterator finish,
                   T init,
                   BinaryOperation binary_op);
    }

### Description

`accumulate()` applies a binary operation to `init` and each value in the range `[start,finish)`. The result of each operation is returned in `init`. This process aggregates the result of performing the operation on every element of the sequence into a single value.

The accumulator `acc` is initialized with the value `init` and modified with `acc = acc + *i` or `acc = binary_op(acc, *i)` for each interator `i`, in order, in the range `[start, finish)`.

### Complexity

`accumulate()` performs exactly `finish-start` applications of the binary operation, `operator+` by default.

### Example

    //
    // accum.cpp
    //

    #include <numeric>    // for accumulate
    #include <vector>     // for vector
    #include <functional> // for multiplies
    #include <iostream>   // for cout

    int main ()
    {
        // Typedef for convenience.
        typedef std::vector<int, std::allocator<int> > vector;

        // Initialize a vector using an array of integers.
        const vector::value_type arr[] =
          { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
        vector v1 (arr, arr + sizeof arr / sizeof *arr);

        // Accumulate sums and products.
        vector::value_type sum =
            std::accumulate (v1.begin (), v1.end (), 0);

        vector::value_type prod =
            std::accumulate (v1.begin (), v1.end (), 1,
                             std::multiplies<vector::value_type>());

        // Output the results.
        std::cout << "For the series: ";
        for (vector::iterator i = v1.begin (); i != v1.end (); ++i)
            std::cout << *i << " ";

        std::cout << "where N = " << v1.size ()
                  << "\nThe sum = (N * N + N) / 2 = " << sum
                  << "\nThe product = N! = " << prod << std::endl;

        return 0;
    }

    Program Output:

    For the series: 1 2 3 4 5 6 7 8 9 10 where N = 10
    The sum = (N * N + N) / 2 = 55
    The product = N! = 3628800

### Standards Conformance

ISO/IEC 14882:1998 -- International Standard for Information Systems -- Programming Language C++, Section 26.4.1