Apache C++ Standard Library Reference Guide

## accumulate()

Library:  Numerics

Function

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