在有标准的双打或浮标等容器的情况下,是否要对下面的lambda函数中的“整数”进行模板化?我在世界各地搜索过这方面的帮助。我甚至要求我的教授的帮助,他说这是可能的,但是对于答案是神秘的。
template <typename T>
float mean(T &container)
{
auto sum = std::accumulate(container.begin(), container.end(), 0/*initial value*/,
[](int total, int cur)
{
return total+cur;
}//end of lambda
);//end of accumulate
return static_cast<float>(sum) / container.size(); //to find the mean
}//end of mean
提前致谢。
答案 0 :(得分:1)
通常有一种方法可以从容器中获取所包含数据的类型。
例如,您可以用int
替换该函数中的T::value_type
,map
应支持所有暴露此类typedef的容器。
这不适用于{{1}}等类型,但如果你想支持它们,你可以专注于它。
答案 1 :(得分:-1)
但在我看来,以这种方式编写这样的函数可能会导致数据丢失 例如
std::vector<float> vf;
vf.push_back(1.3);
vf.push_back(1.5);
vf.push_back(1.3);
vf.push_back(1.123);
vf.push_back(1.526);
float m=mean(vf);
将始终返回1
这里的答案&gt;&gt;&gt;编辑部分中的compute mean using std::accumulate fails不是真的,就像我将vf.push_back(1.3);
更改为vf.push_back(3.3);
我将获得所希望的结果。