Mak*_*gan 3 c++ arrays math performance
假设您有一个2D点阵列,并且正在寻找最小/最大边界框.
哪个会更快,手动方法:
float min_x = min_y = highest, max_x = max_y = lowest;
for(auto p: points) {
max_x = max(max_x, p.x);
max_y = max(max_y, p.y);
min_x = min(min_x, p.x);
min_y = min(min_y, p.y);
}
Run Code Online (Sandbox Code Playgroud)
或使用C++工具:
auto[min_x, max_x] =
minmax_element(values.begin(), values.end(), [](auto p1, auto p2) { return p1.x < p2.x; });
auto[min_y, max_y] =
minmax_element(values.begin(), values.end(), [](auto p1, auto p2) { return p1.y < p2.y; });
Run Code Online (Sandbox Code Playgroud)
我想知道哪个理论上应该更快.我不关心特定机器完成所花费的时间(以毫秒为单位),我想知道在基准测试之前我应该期望哪一个更快.
始终从C++标准库中获取该函数:
因为它非常明确并且与特定编译器绑定,所以该编译器可以识别C++标准库函数并进行优化.也许该函数甚至硬编码到编译器中?
minmax_element因为它的结果可以在一次遍历数据中找到而被引入.(事实上,该标准不允许它进行两次单独的遍历.)