Accumulate Function
The accumulate function performs operations on a sequence:
accumulate(first, last, val, op);
Where first/last are iterators, val is the initial value, and op is the operation (addition, subtraction, etc.).
Example Usage
#include <numeric>
#include <iostream>
#include <vector>
using namespace std;
int main() {
vector<int> data = {1, 1, 4, 5, 1, 4};
// Sum
cout << accumulate(data.begin(), data.end(), 0) << endl;
// Product
cout << accumulate(data.begin(), data.end(), 1, multiplies<int>()) << endl;
return 0;
}
Adjacent Difference
Computes differences between adjacent elements:
adjacent_difference(first, last, result, op);
Example Usage
vector<int> input = {1, 2, 4, 7};
vector<int> output(input.size());
// Default difference
adjacent_difference(input.begin(), input.end(), output.begin());
// Custom operation (sum)
adjacent_difference(input.begin(), input.end(), output.begin(), plus<int>());
Partial Sum
Computes prefix sums:
partial_sum(first, last, result);
Example Usage
vector<int> nums = {1, 2, 3, 4};
vector<int> sums(nums.size());
partial_sum(nums.begin(), nums.end(), sums.begin());
// sums = {1, 3, 6, 10}
Iota Function
Fills a range with incrementing values:
iota(first, last, start_value);
Example Usage
vector<int> sequence(5);
iota(sequence.begin(), sequence.end(), 10);
// sequence = {10, 11, 12, 13, 14}
Mathematical Utilities
C++17 additions:
gcd(x, y); // Greatest common divisor
lcm(x, y); // Least common multiple
midpoint(x, y); // (x + y) / 2