accumulate是STL中用于累加操作的算法,定义于numeric头文件中,可对容器元素求和或执行自定义二元操作。其基本语法为accumulate(起始迭代器, 结束迭代器, 初始值),常用于如vector求和:int sum = accumulate(nums.begin(), nums.end(), 0); 初始值决定返回类型,处理浮点数时应使用0.0避免精度丢失。支持第四个参数为自定义操作,如multiplies()实现乘积,或Lambda表达式实现字符串拼接。使用时需注意包含numeric头文件并合理设置初始值以避免类型截断。

在C++标准模板库(STL)中,accumulate 是一个非常实用的算法,用于对序列进行累加操作。它定义在 numeric 头文件中,能够对容器或数组中的元素求和,也可以用于自定义二元操作。
基本用法:实现序列求和
accumulate 的最常见用途是对一个范围内的元素求和。其基本语法如下:
accumulate(起始迭代器, 结束迭代器, 初始值)
例如,对 vector 中的元素求和:
立即学习“C++免费学习笔记(深入)”;
#include iostream>#include
#include
using namespace std;
int main() {
vector
int sum = accumulate(nums.begin(), nums.end(), 0);
cout
return 0;
}
支持自定义初始值和数据类型
accumulate 的第三个参数是累加的初始值,它也决定了返回值的类型。如果序列包含浮点数,应将初始值设为浮点类型,避免精度丢失。
示例如下:
vectordouble total = accumulate(values.begin(), values.end(), 0.0); // 初始值为 0.0 而非 0
扩展用法:自定义操作
accumulate 还支持第四个参数——一个二元函数或函数对象,用于替换默认的加法操作。这使得它可以实现乘积、拼接等操作。
例如,计算序列元素的乘积:
int product = accumulate(nums.begin(), nums.end(), 1, multiplies// 结果为 1 * 1 * 2 * 3 * 4 * 5 = 120
也可以使用 Lambda 表达式实现自定义逻辑:
string concat = accumulate(words.begin(), words.end(), string(""),[](const string& a, const string& b) {
return a.empty() ? b : a + "-" + b;
});
基本上就这些。accumulate 使用简洁,功能强大,适合大多数累加场景,是 STL 中处理聚合操作的首选工具之一。注意包含 numeric 头文件,且初始值设置要合理,避免类型截断。不复杂但容易忽略细节。










