以下哪两项理论上更快

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)

我想知道哪个理论上应该更快.我不关心特定机器完成所花费的时间(以毫秒为单位),我想知道在基准测试之前我应该​​期望哪一个更快.

Bat*_*eba 5

始终从C++标准库中获取该函数:

  1. 因为它非常明确并且与特定编译器绑定,所以该编译器可以识别C++标准库函数并进行优化.也许该函数甚至硬编码到编译器中?

  2. minmax_element因为它的结果可以在一次遍历数据中找到而被引入.(事实上​​,该标准不允许它进行两次单独的遍历.)