std::accumulate 是 C++ 标准库中 <numeric> 头文件提供的一个函数,用于对一组数据进行累计(求和、求积等)。它的作用是通过一个初始值和一个二元操作,依次将容器中的元素与累计值进行计算,并返回最终的结果。

基本用法:

#include <iostream>
#include <vector>
#include <numeric> // 包含 accumulate 所需的头文件

int main() {
std::vector<int> numbers = {1, 2, 3, 4, 5};

// 使用 accumulate 计算元素的总和
int sum = std::accumulate(numbers.begin(), numbers.end(), 0);

std::cout << "Sum: " << sum << std::endl; // 输出 Sum: 15
return 0;
}


std::accumulate 会遍历从firstlast 的区间(不包括last),然后通过一个二元操作将每个元素与当前的累计值结合起来,最后返回累计结果。

具体来说,它会按照以下的方式进行计算:

1. 使用init 作为初始值。
2. 对区间内的每个元素,应用二元操作(默认是加法),将元素与当前累计值进行合并。
3. 最终返回计算结果。

**默认行为:求和**

如果没有提供额外的操作,std::accumulate 默认使用加法操作来进行累加。例如,在求和的场景中:

1. int sum = std::accumulate(numbers.begin(), numbers.end(), 0);

这相当于:

1. sum = 0 + numbers[0] + numbers[1] + numbers[2] + numbers[3] + numbers[4];

**计算加权平均**

假设你有一组成绩和对应的权重,想要计算加权平均:

#include <iostream>
#include <vector>
#include <numeric>
int main() {
std::vector<int> scores = {85, 90, 88};
std::vector<int> weights = {1, 2, 3};
// 计算加权总和
int weighted_sum = std::accumulate(scores.begin(), scores.end(), 0, 
[&weights, index = 0](int total, int score) mutable {
total += score * weights[index++];
return total;
});
// 计算权重的总和
int total_weight = std::accumulate(weights.begin(), weights.end(), 0);
// 计算加权平均
double weighted_average = static_cast<double>(weighted_sum) / total_weight;
std::cout << "Weighted Average: " << weighted_average << std::endl;
return 0;
}