假设我有一个等级向量,其中等级是
struct Grade{
const int grade;
const int ECTS; // weight
};
是否有STL / range-v3算法/算法使我能够做到这一点?
我知道我可以用std:: accumulate
做一些花式的累加器(记住权重之和),但是我正在寻找一个更简单的替代方法(如果存在)。
答案 0 :(得分:15)
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结构化绑定可以用std::tie
代替。
答案 1 :(得分:6)