【问题标题】:how to use std::accummulate in c++ to calculate sum cubes如何在 C++ 中使用 std::accumulate 计算总和立方
【发布时间】:2020-11-03 06:39:08
【问题描述】:

假设我有一个范围,我想计算每个元素的立方和,例如对于[1,2,3]我要:

13 + 23 + 33 = 36

我将如何使用std::accummulate() 来执行此操作,我必须在其中编写自己的二进制函数?我有:

std::accummulate(iterator to beginning,
                 iterator to end of range,
                 0.0,
                 [](int i, int j) { return i*i*i + j*j*j; });

但这由于某种原因不起作用。

这个问题很奇怪,但在我返回时,我只是将 ij 与它们自己相乘 3 次并相加。

【问题讨论】:

    标签: c++ stl range std


    【解决方案1】:

    像往常一样,CppReference 是你的朋友。

    您应该将运行总和添加到新值的立方中,而不是将运行总和与新值相加。

    std::accumulate(first, last, 0, [](int sum, int value) 
                     { return sum + (value*value*value); });
    

    【讨论】:

    • 使用 transform_reduce 可以更好地理解:std::transform_reduce(first, last, 0, std::plus<>{}, [](auto val) { return val*val*val; })
    • 可能,但问题是“如何使用累积到...”
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-10
    相关资源
    最近更新 更多