c++中accumulate函数的一般用法详解

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;
    }

 

投上你的一票

本文出处:老蒋部落 » c++中accumulate函数的一般用法详解 | 欢迎分享( 公众号:老蒋朋友圈 )

公众号 「老蒋朋友圈」获取站长新知 / 加QQ群 【1012423279】获取商家优惠推送