gpt4 book ai didi

c++ - 用swap函数交换元素可以吗?

转载 作者:太空宇宙 更新时间:2023-11-04 15:59:33 25 4
gpt4 key购买 nike

我知道这听起来很傻,但我不太确定,因为我们的老师告诉我们应该那样交换元素

int a=3, b=1, tmp;  
tmp=a;
a=b;
b=tmp

不是那样的

int a=3, b=1;  
swap(a,b);

你能告诉我使用函数 swap 交换变量有什么不好吗

最佳答案

三种情况之一为真。

  • std::swap 与您老师提供的示例代码完全相同,因为 std::swap 的规范实现只是 A temp = std::移动(一); a = std::move(b); b = std::move(temp);
  • std::swap 是比您老师提供的示例代码更好的代码,因为某些对象可以优化交换而无需将整个对象移动 3 次。
  • std::swap 更糟,因为未指定 std:: 前缀,因此有可能调用 swap正在选择该函数的 ADL 版本,该版本是一些可怕的代码,实际上并没有按照它声称的那样去做。 (例如:void swap(A & a, A & b) {a.val += 15;})

场景 3 理论上是可能的,但可能性极小。如果您的老师没有明确表示这是正在发生的事情,那么这种情况可能不值得考虑。所以我们只能根据前两种情况来推断老师的意图。

在那些情况下,因为 std::swap 基本上总是会更好或完全一样好,我唯一的结论是你的老师要么期望 std::swap 的场景 将无法访问,或者只是试图明确地教您如何自己实现 swap

或者您的老师可能不擅长他们的工作。不过,首先假设前一种解释。

关于c++ - 用swap函数交换元素可以吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47877207/

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