accumulate() and partial_sum() in C++ STL : Numeric header

• Difficulty Level : Easy
• Last Updated : 04 Jan, 2022

The numeric header is part of the numeric library in C++ STL. This library consists of basic mathematical functions and types, as well as optimized numeric arrays and support for random number generation. Some of the functions in the numeric header:

• iota
• accumulate
• reduce
• inner_product
• partial_sum etc.

This article explains accumulate() and partial_sum() in the numeric header which can be used during competitive programming to save time and effort.

1) accumulate(): This function returns the sum of all the values lying in a range between [first, last) with the variable sum. We usually find out the sum of elements in a particular range or a complete array using a linear operation which requires adding all the elements in the range one by one and storing it into some variable after each iteration.

Syntax:

accumulate(first, last, sum);

or

accumulate(first, last, sum, myfun);

Parameters:

• first, last: first and last elements of range whose elements are to be added
• sum:  initial value of the sum
• myfun: a function for performing any specific task.

For example, we can find the product of elements between first and last.

CPP

 // C++ program to demonstrate working of accumulate()#include #include using namespace std; // User defined functionint myfun(int x, int y){    // for this example we have taken product    // of adjacent numbers    return x * y;} int main(){    // Initialize sum = 1    int sum = 1;    int a[] = { 5, 10, 15 };     // Simple default accumulate function    cout << "\nResult using accumulate: ";    cout << accumulate(a, a + 3, sum);     // Using accumulate function with    // defined function    cout << "\nResult using accumulate with"            "user-defined function: ";    cout << accumulate(a, a + 3, sum, myfun);     // Using accumulate function with    // pre-defined function    cout << "\nResult using accumulate with "            "pre-defined function: ";    cout << accumulate(a, a + 3, sum, std::minus());     return 0;}
Output
Result using accumulate: 31
Result using accumulate withuser-defined function: 750
Result using accumulate with pre-defined function: -29

See this Example Problem for more reference: Sum of all elements between k1’th and k2’th smallest elements

2) partial_sum( ): This function assigns a partial sum of the corresponding elements of an array to every position of the second array. It returns the partial sum of all the set of values lying between [first, last) and stores it in another array b.

For example, if x represents an element in [first, last) and y represents an element in the result, the ys can be calculated as:

y0 = x0
y1 = x0 + x1
y2 = x0 + x1 + x2
y3 = x0 + x1 + x2 + x3
y4 = x0 + x1 + x2 + x3 + x4

Syntax:

partial_sum(first, last, b);

or

partial_sum(first, last, b, myfun);

Parameters:

• first, last: first and last element of range whose elements are to be added
• b: index of array where  corresponding partial sum will be stored
• myfun: a user-defined function for performing any specific task

CPP

 // C++ program to demonstrate working of partial_sum()#include #include using namespace std; // user defined functionint myfun(int x, int y){    // the sum of element is twice of its    // adjacent element    return x + 2 * y;} int main(){    int a[] = { 1, 2, 3, 4, 5 };    int b;     // Default function    partial_sum(a, a + 5, b);     cout << "Partial Sum - Using Default function: ";    for (int i = 0; i < 5; i++)        cout << b[i] << ' ';    cout << '\n';     // Using user defined function    partial_sum(a, a + 5, b, myfun);     cout << "Partial sum - Using user defined function: ";    for (int i = 0; i < 5; i++)        cout << b[i] << ' ';    cout << '\n';     return 0;}
Output
Partial Sum - Using Default function: 1 3 6 10 15
Partial sum - Using user defined function: 1 5 11 19 29