gpt4 book ai didi

c++ - 是否可以微优化 "x = max(a,b); y = min(a,b);"?

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:08 26 4
gpt4 key购买 nike

我有一个开始的算法

int sumLargest2 ( int * arr, size_t n )
{
int largest(max(arr[0], arr[1])), secondLargest(min(arr[0],arr[1]));
// ...

我意识到第一个可能不是最优的,因为当您认为知道最小值所需的信息已经存在一次时,调用 max 然后调用 min 是重复的你已经找到了最大值。所以我想我可以做

   int largest = max(arr[0], arr[1]);
int secondLargest = arr[0] == largest ? arr[1] : arr[0];

减少对 min 的无用调用,但我不确定这是否真的节省了多少操作。是否有任何花哨的位移算法可以做等同于

int largest(max(arr[0], arr[1])), secondLargest(min(arr[0],arr[1]));

??????

最佳答案

在 C++ 中,您可以使用 std::minmax生成最小值和最大值的 std::pair。这与 std::tie 结合起来特别容易:

#include <algorithm>
#include <utility>

int largest, secondLargest;
std::tie(secondLargest, largest) = std::minmax(arr[0], arr[1]);

至少 GCC 能够将对 minmax 的调用优化为单个比较,与下面的 C 代码的结果相同。

在 C 中,您可以自己编写测试:

int largest, secondLargest;
if (arr[0] < arr[1]) {
largest = arr[1];
secondLargest = arr[0];
} else {
largest = arr[0];
secondLargest = arr[1];
}

关于c++ - 是否可以微优化 "x = max(a,b); y = min(a,b);"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30353910/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com