是否存在累积分钟的std ::实现

时间:2014-03-31 15:14:27

标签: c++ gcc

所以假设

float bar [5] = {  5.7106, 3.1768, 5.7458, 4.5859, 2.2718 };

我正在寻找以下功能:

cummin(bar,bar+bar.size());

将返回到位的累积最小值 条形条目,例如该栏包含:

5.7106, 3.1768, 3.1768, 3.1768, 2.2718 

我的问题也是可以实现的 累积分钟比天真的方法更有效率 (它在代码I的工作中用于瓶颈功能  我并不认为它可以被矢量化。

1 个答案:

答案 0 :(得分:5)

没有这样的功能。但是,这是prefix sum的应用程序,在C ++中称为std::partial_sum

您可以这样称呼它:

std::partial_sum(begin(bar), end(bar), begin(bar),
    [](float a, float b) { return std::min(a, b); });

如果这仍然是一个瓶颈,那么一个有趣的观察是前缀和可以有效地并行化。这不是一件轻而易举的事。幸运的是,Threading Building Blocks等并行算法库已经包含了它的实现。