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
会遍历从first
到last
的区间(不包括last
),然后通过一个二元操作将每个元素与当前的累计值结合起来,最后返回累计结果。
具体来说,它会按照以下的方式进行计算:
- 使用
init
作为初始值。 - 对区间内的每个元素,应用二元操作(默认是加法),将元素与当前累计值进行合并。
- 最终返回计算结果。
默认行为:求和
如果没有提供额外的操作,std::accumulate
默认使用加法操作来进行累加。例如,在求和的场景中:
int sum = std::accumulate(numbers.begin(), numbers.end(), 0);
这相当于:
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;
}
本文出处:老蒋部落 » c++中accumulate函数的一般用法详解 | 欢迎分享( 公众号:老蒋朋友圈 )