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