С++ для начинающих

       

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

}



Содержание раздела