La STL fornisce la funzione generica accumulate che consente di accumulare, ad un valore iniziale, gli elementi di una sequenza. L’operazione di default è la somma degli elementi. Può essere comunque utilizzata una funzione binaria:

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

dove first e last rappresentano l’inizio e la fine della sequenza, init è il valore iniziale mentre binary_op è una funzione binaria.

#include <iostream>
#include <numeric>

using namespace std;

class square
{
	public:
		int operator()(int x, int y){ return x + y*y; }
};

int cube(int x, int y)
{
	return x + y*y*y;
}

int main()
{
	const int size = 8;
	square squarefun;

	int accumulator = 0;
	int array[8];

	for(int i = 0; i < size; i++)
		array[i] = i+1;

	cout << "Somma dei primi " << size << " naturali: "
		<< accumulate(array, array+size, accumulator)
		<< endl;
	cout << "Somma dei primi " << size << " quadrati: "
		<< accumulate(array, array+size, accumulator, squarefun)
		<< endl;
	cout << "Somma dei primi " << size << " cubi: "
		<< accumulate(array, array+size, accumulator, &cube)
		<< endl;
}

in questo esempio effettuiamo la somma dei primi 8 naturali, poi, utilizzando una funzione e un oggetto, sommiamo i primi 8 quadrati e cubi.