std::accumulate是C++中用于序列求和或自定义折叠操作的算法,定义于
std::accumulate 是 C++标准库中定义在
基本用法:求和最简单的用法是计算一个区间内所有元素的总和。函数原型如下:std::accumulate(起始迭代器, 结束迭代器, 初始值)例如,对 vector 中的整数求和:int sum = std::accumulate(vec.
begin (), vec.
end (),0);这里第三个参数是累加的初始值。注意初始值的类型会影响结果类型。比如用 0.0 可以让结果以浮点数方式累加:立即学习“C++免费学习笔记(深入)
”;
double sum = std::accumulate(vec.
begin (), vec.
end (),
0.0
);自定义操作:不只是加法std::accumulate 还支持第四个参数——一个二元函数或函数对象,用来替换默认的加法操作。这让你可以实现乘积、字符串连接、最大值累积等。
C函数速查手册(CHM版)
C函数速查手册(CHM版)
下载
例如,计算所有元素的乘积:
int product = std::accumulate(vec.
begin (), vec.
end (),1, std::multiplies
begin (), vec.
end (),string (),[](string a,int b) {return a + " " + std::to_string(b); });使用建议与注意事项使用 std::accumulate 时有几点要注意,才能写出高效又安全的代码:初始值不能忽略:即使容器非空,也必须提供初始值。若容器为空,结果就是该初始值。
类型匹配:初始值类型应能容纳运算结果,避免溢出或精度丢失。比如对 long long 容器求和,初始值也应是 long long。
性能考虑:相比手写 for 循环,std::accumulate 在现代编译器下通常能被完全优化,性能一致,但代码更简洁清晰。
适用范围广:不仅适用于 vector,任何满足输入迭代器要求的容器都可以使用,如 array、list、deque 等。
基本上就这些。std::accumulate 看似简单,但结合 lambda 和 STL 函数对象后非常灵活,是 C++ 中实现序列折叠的首选工具。不复杂但容易忽略细节。
