如何在 C++ 中使用 for_each 累积结果? [复制]
Posted
技术标签:
【中文标题】如何在 C++ 中使用 for_each 累积结果? [复制]【英文标题】:How to accumulate a result using for_each in C++? [duplicate] 【发布时间】:2021-01-05 13:56:08 【问题描述】:我正在尝试使用 for_each
重现 accumulate
所做的事情。但是我不明白for_each
版本有什么问题:
int main()
std::function<float(float, int)> func = [](float a, int i) return a * i; ;
std::vector<int> m 1, 2, 3, 4 ; // <-- Multiply: 1*2*3*4 = 24
float accumulationUsingAccumulate = 1.0f;
accumulationUsingAccumulate = accumulate(m.cbegin(), m.cend(), accumulationUsingAccumulate, func);
std::cout << "[Accumulate] Result = " << accumulationUsingAccumulate << std::endl;
float accumulationUsingForEach = 1.0f;
std::for_each(m.cbegin(), m.cend(), [&accumulationUsingForEach, &m, &func]()
accumulationUsingForEach = func(accumulationUsingForEach, *m.cbegin()++);
);
std::cout << "[For Each] Result = " << accumulationUsingForEach << std::endl;
第二个版本的外层 lambda 函数需要参数吗?
返回以下错误信息:
【问题讨论】:
std::for_each
想要接受一个参数的函数(包括 lambda 函数)。为什么不给呢?
只需要一个参数int i
,并使用它来代替*m.cbegin()++
。另外,请在代码无法编译时添加错误消息。
(您已经得到了答案)您知道您也应该将错误消息作为可复制文本发布,对吧?
【参考方案1】:
std::for_each
第三个参数,一元函数,应该接受当前元素
float accumulationUsingForEach = 1.0f;
std::for_each(m.cbegin(), m.cend(), [&accumulationUsingForEach, &func](const float& a)
accumulationUsingForEach = func(accumulationUsingForEach, a);
);
std::cout << "[For Each] Result = " << accumulationUsingForEach << std::endl;
【讨论】:
以上是关于如何在 C++ 中使用 for_each 累积结果? [复制]的主要内容,如果未能解决你的问题,请参考以下文章