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

use*_*035 2 c++ gcc

所以假设

float bar [5] = {  5.7106, 3.1768, 5.7458, 4.5859, 2.2718 };
Run Code Online (Sandbox Code Playgroud)

我正在寻找一个功能,如:

cummin(bar,bar+bar.size());
Run Code Online (Sandbox Code Playgroud)

这将返回bar的条目的就地累积最小值,例如,该条包含:

5.7106, 3.1768, 3.1768, 3.1768, 2.2718 
Run Code Online (Sandbox Code Playgroud)

我的问题是,还有可能比天真的方法更有效地实现累积分钟(它在我正在研究的代码中用于瓶颈函数,我认为它不能被矢量化).

Kon*_*lph 5

没有这样的功能.但是,这是前缀sum的应用,std::partial_sum在C++中已知.

你可以这样称呼它:

std::partial_sum(begin(bar), end(bar), begin(bar),
    [](float a, float b) { return std::min(a, b); });
Run Code Online (Sandbox Code Playgroud)

如果这仍然是一个瓶颈,那么一个有趣的观察是前缀和可以有效地并行化.这不是一件轻而易举的事.幸运的是,并行算法库(如线程构建块)已经包含它的实现.