std::partial_sum (3) Linux Manual Page
std::partial_sum – std::partial_sum
Synopsis
Defined in header <numeric>
template< class InputIt, class OutputIt > (1)
OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first );
template< class InputIt, class OutputIt, class BinaryOperation >
OutputIt partial_sum( InputIt first, InputIt last, OutputIt d_first, (2)
BinaryOperation op );
Computes the partial sums of the elements in the subranges of the range [first, last) and writes them to the range beginning at d_first. The first version uses operator+ to sum up the elements, the second version uses the given binary function op
, both applying std::move to their operands on the left hand side
(since C++20).
Equivalent operation:
*(d_first) = *first;
*(d_first+1) = *first + *(first+1);
*(d_first+2) = *first + *(first+1) + *(first+2);
*(d_first+3) = *first + *(first+1) + *(first+2) + *(first+3);
...
op must not have side effects. (until C++11)
op must not invalidate any iterators, including the end iterators, or modify any elements of the range involved. (since C++11)
Parameters
first, last – the range of elements to sum
d_first – the beginning of the destination range; may be equal to first
op – Ret fun(const Type1 &a, const Type2 &b);
Type requirements
–
InputIt must meet the requirements of LegacyInputIterator.
–
OutputIt must meet the requirements of LegacyOutputIterator.
Return value
Iterator to the element past the last element written.
Complexity
Exactly (last – first) – 1 applications of the binary operation
Possible implementation
First version
Second version
Example
// Run this code
#include <numeric>
#include <vector>
#include <iostream>
#include <iterator>
#include <functional>
int main()
{
std::vector<int> v = {2, 2, 2, 2, 2, 2, 2, 2, 2, 2}; // or std::vector<int>v(10, 2);
std::cout << "The first 10 even numbers are: ";
std::partial_sum(v.begin(), v.end(),
std::ostream_iterator<int>(std::cout, " "));
std::cout << '\n';
std::partial_sum(v.begin(), v.end(), v.begin(), std::multiplies<int>());
std::cout << "The first 10 powers of 2 are: ";
for (auto n : v) {
std::cout << n << " ";
}
std::cout << '\n';
}
Output:
See also
adjacent_difference (function template)
accumulate (function template)
inclusive_scan similar to std::partial_sum, includes the ith input element in the ith sum
(C++17)
exclusive_scan similar to std::partial_sum, excludes the ith input element from the ith sum
(C++17)
