Пространства имён
Варианты
Действия

accumulate

Материал из cppreference.com

Синтаксис:

#include <numeric>
T accumulate( input_iterator start, input_iterator end, T val );
T accumulate( input_iterator start, input_iterator end, T val, BinaryFunction f );

Функция accumulate считает сумму значений val и всех элементов в диапазоне [start,end).

Если бинарная функция f определена, она используется вместо оператора + для суммирования элементов.

Функция accumulate действует за линейное время.

Например, следующий код использует accumulate, чтобы суммировать значения в векторе:

#include <iostream>
using std::cout;
#include <vector>
using std::vector;
#include <numeric>
using std::accumulate;
 
int main() {
  vector<int> v;
  const int START = 1, END = 10;
  for( int i = START; i <= END; ++i ) v.push_back(i);
 
  int sum = accumulate( v.begin(), v.end(), 0 );
 
  cout << "sum from " << START << " to " << END << " is " << sum << '\n';
}

Функция accumulate может быть так же использована и с нечисловыми типами. Следующий код использует accumulate, чтобы сцепить все строки в векторе в единую строку.

int main () {
    string str = "Hello World!";
    vector<string> vec(10,str);   // vec = ["Hello World!", "Hello World!", ...]
    string a = accumulate( vec.begin(), vec.end(), string("") );
    cout << a << endl;            // выводит "Hello World!Hello World!Hello..."
}

Смотрите также: adjacent_difference, count, inner_product, partial_sum