<numeric> 头文件提供数值运算相关函数,以下是核心函数及用法:
1. accumulate - 累加/累积
cpp
vector<int> v = {1,2,3,4,5};
int sum = accumulate(v.begin(), v.end(), 0); // 15
int product = accumulate(v.begin(), v.end(), 1, multiplies<>()); // 1202. inner_product - 内积计算
cpp
vector<int> a = {1,2,3}, b = {4,5,6};
int dot = inner_product(a.begin(), a.end(), b.begin(), 0); // 32
int sum_abs_diff = inner_product(a.begin(), a.end(), b.begin(), 0, plus<>(),
[](int x, int y){return abs(x-y);}); // 93. adjacent_difference - 相邻差值
cpp
vector<int> nums = {2,4,6,8};
vector<int> diff(4);
adjacent_difference(nums.begin(), nums.end(), diff.begin()); // [2,2,2,2]
adjacent_difference(nums.begin(), nums.end(), diff.begin(), multiplies<>()); // [2,8,24,48]4. partial_sum - 前缀和
cpp
vector<int> nums = {1,2,3,4};
vector<int> prefix(4);
partial_sum(nums.begin(), nums.end(), prefix.begin()); // [1,3,6,10]
partial_sum(nums.begin(), nums.end(), prefix.begin(), multiplies<>()); // [1,2,6,24]5. gcd - 最大公约数 (C++17)
cpp
int a = 12, b = 18;
int result = gcd(a, b); // 6
int result2 = gcd(48, 60); // 126. lcm - 最小公倍数 (C++17)
cpp
int a = 12, b = 18;
int result = lcm(a, b); // 36
int result2 = lcm(4, 6); // 127. midpoint - 安全中点 (C++17)
cpp
int x = 10, y = 20;
int mid = midpoint(x, y); // 15
double dmid = midpoint(1.5, 3.5); // 2.5综合示例
cpp
vector<int> data = {1,3,5};
int total = accumulate(data.begin(), data.end(), 0); // 9
vector<int> pre(3), diff(3);
partial_sum(data.begin(), data.end(), pre.begin()); // [1,4,9]
adjacent_difference(data.begin(), data.end(), diff.begin()); // [1,2,2]

