我正在学习新的 C++ 11 lambda 功能,这段代码究竟如何使用 lambda 计算数组( double )的乘积?
double product2 = accumulate(begin(doubles), end(doubles), 1.0,
[](double partialresult, double d){return partialresult*d; });
我想了解变量 partialresult 和 d 的来源/去向。
最佳答案
std::accumulate 对 double 的特化,将有一个概念上类似于以下的实现(为简单起见,删除了模板参数语法):
double accumulate(
iterator_type begin, iterator_type end,
double initial, functor_type f)
{
double partialResult = initial;
while(begin != end)
partialResult = f(partialResult, *begin++);
return partialResult;
}
基本上,部分结果就是每一步累加的中间结果。 d 将是迭代器指向的值。
关于STL accumulate上的C++ lambda函数机制,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20837934/