Шаблонна функція 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 ;
}
Вивід програми в терміналі: cpp_std_accumulate_sample1-cxx_demo_program_output

Приклад #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 ;
}
Вивід даної програми наступний: cpp_std_accumulate_sample2-cxx_demo_program_output_for_vector
Категорії: