Алгоритм accumulate()
template < class InputIterator, class Type >
Type accumulate(
InputIterator first, InputIterator last,
Type init );
template < class InputIterator, class Type,
class BinaryOperation >
Type accumulate(
InputIterator first, InputIterator last,
Type init, BinaryOperation op );
Первый вариант accumulate() вычисляет сумму значений элементов последовательности из диапазона, ограниченного парой итераторов [first,last), с начальным значением, которое задано параметром init. Например, если дана последовательность {1,1,2,3,5,8} и начальное значение 0, то результатом работы алгоритма будет 20. Во втором варианте вместо оператора сложения к элементам применяется переданная бинарная операция. Если бы мы передали алгоритму accumulate() объект-функцию times<int> и начальное значение 1, то получили бы результат 240. accumulate() – это один из численных алгоритмов; для его использования в программу необходимо включить заголовочный файл <numeric>.
#include <numeric>
#include <list>
#include <functional>
#include <iostream.h>
/*
* выход:
* accumulate()
* работает с последовательностью {1,2,3,4}
* результат для сложения по умолчанию: 10
* результат для объекта-функции plus<int>: 10
*/
int main()
{
int ia[] = { 1, 2, 3, 4 };
list<int,allocator> ilist( ia, ia+4 );
int ia_result = accumulate(&ia[0], &ia[4], 0);
int ilist_res = accumulate(
ilist.begin(), ilist.end(), 0, plus<int>() );
cout << "accumulate()\n\t"
<< "работает с последовательностью {1,2,3,4}\n\t"
<< "результат для сложения по умолчанию: "
<< ia_result << "\n\t"
<< "результат для объекта-функции plus<int>: "
<< ilist_res
<< endl;
return 0;
}