【发布时间】:2019-10-07 09:22:21
【问题描述】:
如果我想累加 std::vector 的绝对值,我可以使用 lambda 计算绝对值并将其添加到 std::accumulate (live demo) 的总和中。
#include <numeric>
#include <vector>
int main (){
std::vector<int> vec {1,2,3,-4};
auto abs_val =[](auto val, auto sum){return sum + std::fabs(val);};
return std::accumulate(vec.begin(), vec.end(), 0, abs_val);
}
我想写
return std::accumulate(vec.begin(), vec.end(), 0, std::fabs());
但这不会编译,因为需要一个带有两个参数 sum 和 value 的函数。
有没有更优雅的方式来写这个?我需要 lambda 吗?我可以摆脱它吗?
【问题讨论】:
-
您可能想看看
transform_reduce有一个重载(该页面上的第 3 号)采用可能有用的一元运算符。需要 C++17。无法自己检查,因为我的编译器太旧了。 -
当你的向量是
时你为什么要使用 fabs()? -
@RHertel 这就是答案。请照此张贴。
-
fabs 定义在 cmath 头文件en.cppreference.com/w/cpp/numeric/math/fabs
标签: c++ lambda accumulate