这是我在这里的第一个问题,所以希望这是一个很好的问题(我已经搜索了答案,但还没有找到)。
我有一个用 C++ 编写的基于事件的疾病模型,我正在尝试将其转换为 OOP(部分是为了我自己的学习经验)。基本类 (Herd) 存储易感、感染和耐药动物的数量,以及可能事件发生的速率。
class Herd {
private:
int S,I,R,N;
float birth, death, infection, recovery, movement;
public:
void calc_birth(void) { birth = r*N*(1.0-N/c); }
void calc_infection(void) { infection = N>0 ? beta*S*I/N : 0.0; }
// etc.
};
然后我有一个牛群的 vector
来跟踪。在整个模型中,我需要计算所有牛群中每个成员的总和,在事件改变牛群中个体的数量或类别后(这种情况经常发生)。我已经有 4 个类别和 5 个事件,这个模型可以很容易地扩展并且需要更多。
在我以前的程序代码中,我只是为每个成员提供了一个单独的 vector ,并且很容易创建一个 sum()
函数来计算结果,但我看不到如何用一个类来做到这一点,而不用为每个成员编写一个单独的求和函数(这是可能的,但我怀疑这是一个特别好的方法)。我可以创建一个静态成员(例如 sum_S
)来跟踪总数,并在每次事件发生时更新它,但这可能并不适合所有成员,而且我不确定总数是否可能在谈到利率时,不要慢慢偏离真实值(value)。
有没有一种方法可以编写单个 sum()
函数,它将我想要的成员作为参数,并返回所有牛群中该特定成员的总和?
谢谢!
最佳答案
标准库 header numeric
包含函数accumulate .它并不完全符合您的要求,但很容易适应:
#include <numeric>
#include <vector>
#include <iostream>
struct Foo {
int member;
};
int main()
{
std::vector<Foo> v = { {1}, {2}, {3} };
int sum
= std::accumulate(begin(v), end(v), 0,
// lambda that sums up
[](const int& x, const Foo& y)
{return x + y.member;});
std::cout << sum << std::endl;
return 0;
}
该代码使用 initializer_lists
和 lambda。如果您的编译器不支持这些,请使用相应的 C++03 代码(push_back
和仿函数)。
关于c++ - 对象数组的特定成员的总和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16561266/