假设我有一个成绩 vector ,其中成绩是
struct Grade{
const int grade;
const int ECTS; // weight
};
是否有 STL/range-v3 算法/算法可以让我做到这一点?
我知道我可以用 std::accumulate
来做,用一些奇特的类型作为累加器(记住权重的总和),但我正在寻找一个更简单的替代方案(如果存在的话)。
最佳答案
Grade
类型本身就足以充当累加器类型。
auto [grade_sum, ects] = std::accumulate(
grages.begin(), grades.end(), Grade {0,0},
[] (Grade acc, Grade g) -> Grade {
return { g.grade*g.ECTS + acc.grade,
g.ECTS + acc.ECTS };
});
// auto average_grade = grade_sum/ects;
如有必要,C++17 结构化绑定(bind)可替换为 std::tie
。
关于c++ - STL/ranges 算法计算加权平均值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57713723/