C++STL之numeric库用法
246 字
1 分钟
C++STL之numeric库用法
<numeric> 头文件提供数值运算相关函数,以下是核心函数及用法:
1. accumulate - 累加/累积
vector<int> v = {1,2,3,4,5};int sum = accumulate(v.begin(), v.end(), 0); // 15int product = accumulate(v.begin(), v.end(), 1, multiplies<>()); // 1202. inner_product - 内积计算
vector<int> a = {1,2,3}, b = {4,5,6};int dot = inner_product(a.begin(), a.end(), b.begin(), 0); // 32int sum_abs_diff = inner_product(a.begin(), a.end(), b.begin(), 0, plus<>(), [](int x, int y){return abs(x-y);}); // 93. adjacent_difference - 相邻差值
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 - 前缀和
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)
int a = 12, b = 18;int result = gcd(a, b); // 6int result2 = gcd(48, 60); // 126. lcm - 最小公倍数 (C++17)
int a = 12, b = 18;int result = lcm(a, b); // 36int result2 = lcm(4, 6); // 127. midpoint - 安全中点 (C++17)
int x = 10, y = 20;int mid = midpoint(x, y); // 15double dmid = midpoint(1.5, 3.5); // 2.5综合示例
vector<int> data = {1,3,5};int total = accumulate(data.begin(), data.end(), 0); // 9vector<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]支持与分享
如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!
C++STL之numeric库用法
https://jiheweihuan.github.io/posts/cpp-numeric/