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); // 15
int product = accumulate(v.begin(), v.end(), 1, multiplies<>()); // 120

2. inner_product - 内积计算#

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);}); // 9

3. 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); // 6
int result2 = gcd(48, 60); // 12

6. lcm - 最小公倍数 (C++17)#

int a = 12, b = 18;
int result = lcm(a, b); // 36
int result2 = lcm(4, 6); // 12

7. midpoint - 安全中点 (C++17)#

int x = 10, y = 20;
int mid = midpoint(x, y); // 15
double dmid = midpoint(1.5, 3.5); // 2.5

综合示例#

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]

支持与分享

如果这篇文章对你有帮助,欢迎分享给更多人或赞助支持!

赞助
C++STL之numeric库用法
https://jiheweihuan.github.io/posts/cpp-numeric/
作者
几何为欢
发布于
2025-10-18
许可协议
CC BY-NC-SA 4.0
Profile Image of the Author
几何为欢
CUMT 2025级大一在读 人工智障专业 CTF/ACM入门ing 希望成为CS/AI人才喵!
公告
欢迎来到我的博客!这是一则示例公告。
音乐
封面

音乐

暂未播放

0:00 0:00
暂无歌词
分类
标签
站点统计
文章
13
分类
7
标签
19
总字数
6,280
运行时长
0
最后活动
0 天前

目录