在 std::accumulate c++ 中使用模板 Lambda 表达式
Using a template Lambda expression inside a std::accumulate c++?
在
存在双精度或浮点数等标准容器的情况下,是否可以模板化下面的lambda函数中的"ints"? 我已经在世界各地寻找这方面的帮助。 我甚至向我的教授寻求帮助,他说这是可能的,但对答案是神秘的。
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
提前谢谢。
通常有一种方法可以从容器中获取所包含数据的类型。
例如,您可以将该函数中的int
替换为T::value_type
,该函数应支持所有公开此类 typedef 的容器。
这不适用于map
等类型,但如果您想支持它们,您可以专门针对它。
但在我看来,以这种方式编写这样的函数可能会导致数据丢失例如
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
这里的答案>>>编辑部分使用 std::accumulate 失败的计算平均值并不是真的,就像我vf.push_back(1.3);
更改为vf.push_back(3.3);
我会得到想要的结果一样。
相关文章:
- 这 4 个 lambda 表达式之间有什么区别?
- 使用成员在类中创建 lambda 表达式
- 将 lambda 表达式传递给 std::function in C++
- 在 lambda 表达式中使用 std::atomic
- &&对lambda表达式有什么好处?
- Tbb 库:错误:编写自定义类函数而不是 lambda 表达式时,对函数的调用不匹配
- 列表.erase 中的 lambda 表达式
- 使用 lambda 表达式的 Raspbian G++ 8.3.0 导致 ']' 之前的预期主表达式 - 即使标准设置为 c++14
- 仅通过引用捕获的 lambda 表达式是否保证不会抛出?
- C++: priority_queue:模板参数中的 lambda 表达式
- 容器如何处理 lambda 表达式的参数
- 在C++ Lambda 表达式中,为什么人们更喜欢按值捕获而不是作为参数传递?
- 如何在 lambda 表达式中传递变量?
- 针对 std::function 的 lambda 表达式和模板推导:为什么会这样?
- 如何修改Lambda表达式以将输出放入文本文件
- C++如何使用lambda表达式来捕获上一次迭代的值
- 为什么Qt在信号和插槽中为lambda表达式抛出错误?
- C++:从捕获函数参数的函数返回 lambda 表达式
- C++ Lambda 表达式:通过 ref 开销捕获
- Qt 连接无法识别 lambda 表达式