是否有标准::累计最小值的实现

Is there an std:: implementation of the cummulative min

本文关键字:最小值 实现 标准 是否      更新时间:2023-10-16

所以假设

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 

我的问题是是否可以实现累积最小值比朴素方法更有效(它用于我正在处理的代码中的瓶颈函数 上,我认为它不能被矢量化)。

没有这样的函数。但是,这是前缀 sum 的应用,在 C++ 中称为 std::partial_sum

你可以这样称呼它:

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

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