Шаблонна функція std::accumulate з бібліотеки STL C++ призначена для отримання загального значення з послідовності елементів. Оголошення функції виглядає наступним чином:
template <class InputIterator, class T>
T accumulate (InputIterator begin, InputIterator end, T init);
Параметри begin і end являються ітераторами і призначені для вказування меж послідовності, у якій повинно накопичуватись значення. Третій параметр init, являється початковим значенням, яке додається до суми елементів. Функція повертає накопичене значення.
Приклади
Приклад #1
Розглянемо простий приклад акумулювання значення з елементів масиву цілих чисел.
#include <numeric> /* функція accumulate */
#include <iostream> /* об'єкт cout */
using namespace std ; /* друкуємо усе без std */
/* головна функція програми */
int main (int argc, char** argv)
{
/* створюємо піддослідний масив цілих чисел і визначаємо його довжину */
int iArray [] = {5,6,1,56,7,234,7,8,45,65,87} ;
int iLen = sizeof(iArray)/sizeof(iArray[0]) ;
/* виводимо для наглядності масив у термінал */
cout << "Масив:" << endl ;
for (unsigned int iter=0; iter<iLen; ++iter)
{ cout << iArray[iter] << "; " ; }
cout << endl ;
/* застосовуємо функцію accumulate */
int result = accumulate (iArray, iArray+iLen, 0) ;
/* виводимо результат на екран терміналу */
cout << "акумульоване значення масиву: " << result << endl ;
return 0 ;
}
Вивід програми в терміналі:
Приклад #2
Розглянемо приклад застосування функції accumulate до вектору (std::vector) значень
#include <numeric> /* функція accumulate */
#include <vector> /* клас vector */
#include <iostream> /* об'єкт cout */
using namespace std ; /* друкуємо усе без std */
/* головна функція програми */
int main (int argc, char** argv)
{
/* створюємо піддослідний вектор для збереження послідовності */
vector<double> values ;
/* заповнюємо вектор значеннями, які відображають закон f(x) = (2*x) / (x^2),
** і заодно виводимо їх на екран терміналу */
cout << "Значення вектора: " << endl ;
for (unsigned int x=1; x<=20; ++x)
{
double element = (2.0*(double)x) / (x*x) ;
values.push_back (element) ;
cout << element << "; " ;
}
cout << endl ;
/* застосовуємо функцію accumulate */
double result = accumulate (values.begin(), values.end(), 0) ;
/* виводимо результат на екран терміналу */
cout << "Сума вектора: " << result << endl ;
return 0 ;
}
Вивід даної програми наступний: