Алгоритм 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; |
}