gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 15:11:05 26 4
gpt4 key购买 nike

想象一个这样的类(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com