计算加权平均值的 STL/ranges 算法

共2个回答, 标签: c++ stl weighted-average range-v3

假设我有一个分数向量,其中分数是

结构等级 {
Const int 的等级;
Const int 的学分;//重量
};

是否有 STL/range-v3 算法/算法使我能够做到这一点?

我知道我可以用std:: accumulate使用一些花哨的类型作为累加器 (记住重量的总和),但是如果存在的话,我正在寻找一个更简单的替代方案。

第1个答案

Grade类型本身作为累加器类型是足够奇特的。

汽车 [grade_sum 、学分 = std:: 积累 (
开始 (),等级。结束 (),等级 {0,0},
[] (G 级 acc 级)-> {级
返回 {g.等级 * g.ECTS acc.等级,
G.学分累计。ECTS};
});
//自动 average_grade = grade_sum/学分;

C17 结构化绑定可以用std::tie如果需要的话

第2个答案

Range-v3,可能是:

自动平均值 = 范围:: 内部产品 (等级、 0 、 {} 和等级:: 等级和等级:: ECTS)
/Double (范围:: 累积 (等级,0,{},等级:: ECTS));

演示

相关问题

是否可以使用 std:: basic _ string 作为 char * 的包装? 使用 std:: transform 和 std:: back_inserter 有效吗? 为什么在 std:: set 上迭代比在 std:: vector 上迭代慢得多? 如何平滑和绘制 x 与 y 加权平均数, 加权 x? 计算加权平均值的 STL/ranges 算法