c++ - 对涉及特定类成员的实例集合执行操作

标签 c++ class iteration

想象一个这样的类(class)人:

class Person {
        public:
        double height;
        double weight;
};

我有一个包含此类实例的 vector :
std::vector<Person> crowd;

现在,我想计算平均高度和体重,所以我这样做:
double mean_height = 0, mean_weight = 0;
for (int i=0; i<crowd.size(); i++) {
        mean_height += crowd[i].height;
        mean_weight += crowd[i].weight;
}
mean_height /= crowd.size();
mean_weight /= crowd.size();

由于我在代码中大量使用了均值运算,因此我希望能够编写一个执行以下操作的函数:
mean_height = crowd_mean(crowd, height);

参数“height”(无论它是什么类型)指定我要对 vector 中所有实例执行所有“height”成员的均值。是否有捷径可寻?

最佳答案

您可以使用pointer to a class member执行此操作。看起来像

double crowd_mean(const std::vector<Person>& crowd, double Person::*member)
{
    double mean = 0;
    for (const auto& elem : crowd)
        mean += elem.*member;
    return mean / crowd.size();
}

int main() 
{
    std::vector<Person> foo(10);
    auto result = crowd_mean(foo, &Person::weight);
}

如果要使其更通用,则可以使函数成为函数模板,例如
template <typename T>
double crowd_mean(const std::vector<T>& crowd, double T::*member)
{
    double mean = 0;
    for (const auto& elem : crowd)
        mean += elem.*member;
    return mean / crowd.size();
}

关于c++ - 对涉及特定类成员的实例集合执行操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59754746/

相关文章:

objective-c - 未调用 Objective C 自定义类方法

python - 如何递归查找嵌套 JSON 中的特定键?

java - 如何在java中创建一个每次迭代返回不同变量的循环?

jquery - 将多个 jQuery.val() 读入数组

c++ - 如何定义线程局部静态变量?

c++ - 使用 MongoDB C++ 驱动程序在 BSON 文档中查找

php - 调用非对象的成员函数,但对象是 $this 即它本身?

c++ - 到最近邻居的平均距离的近似值?

c++ - 提升精神 std::vector<unsigned> 已解析但未捕获

C++在构造函数初始化列表中获取类成员地址