【发布时间】:2011-06-10 12:19:05
【问题描述】:
以下代码计算T 集合中T 的特定属性的平均值:
public double Average<T>(IList<T> items, Func<T, double> selector)
{
double average = 0.0;
for (int i = 0; i < items.Count; i++)
{
average += selector(items[i])
}
return average / items.Count;
}
然后我可以使用 lambda 表达式调用它:
double average = Average(items, p => p.PropertyName);
我将如何在 C++ 中执行此操作?到目前为止,这是我所拥有的:
template <typename T>
double average(const vector<T>& items, ?)
{
double average= 0.0;
for (int i = 0; i < items.size(); i++)
{
average += ?;
}
return average/ items.size();
}
我该如何使用 c++ lambda 调用它?
编辑:非常感谢大家,这就是我最终得到的结果:
template <typename T>
double average(const vector<T>& items, function<double(T)> selector)
{
double result = 0.0;
for (auto i = items.begin(); i != items.end(); i++)
{
result += selector(*i);
}
return result / items.size();
}
在main():
zombie z1;
z1.hit_points = 10;
zombie z2;
z2.hit_points = 5;
items.push_back(z1);
items.push_back(z2);
double average = average<zombie>(items, [](const zombie& z) {
return z.hit_points;
});
【问题讨论】:
标签: c# c++ c++11 function-object