Lud*_*ert 5 c++ min minimization c++20 std-ranges
目标是在一定范围的输入值上最小化函数。性能很重要。不幸的是,该ranges::min()算法一遍又一遍地重新计算实时最优的输出。
看起来该算法可以缓存与最佳值相对应的输出值,或者我错过了什么?
在这个例子中,为什么f(x=0)需要调用n次呢?
#include <ranges>
#include <algorithm>
#include <stdio.h>
using namespace std;
int main()
{
auto f=[](int x){
printf("calling f(x=%d)\n", x);
return x*x;
};
auto rg = views::iota(0,4);
int x1 = ranges::min(rg, {}, f);
}
Run Code Online (Sandbox Code Playgroud)
它输出:
调用 f(x=0) 调用 f(x=1) 调用 f(x=0) 调用 f(x=2) 调用 f(x=0) 调用 f(x=3)
有没有ranges::min()更优化的调用方式?
可以ranges::min以某种方式实现,以便存储当前正在测试的投影对象吗?嗯,这会对这样的项目提出特定的要求。也就是说,您可以覆盖它(如果您找到较小的元素,以便可以将其缓存在同一变量中)。
目前这不是投影的要求;结果只需与比较函数进行比较即可。因此,强加这一点实际上会使预测更加严格。
现在,如果选择的话,允许实现缓存该值,因为投影函子需要是纯的。也就是说,如果它检测到投影中的值类型是可复制的,它就可以复制它。但这是实施质量的问题,而不是标准要求。
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |