c++ - C++ 的更好的 ow level int 交换

标签 c++ pointers swap

我正在学习 C++,我有一个像这样的函数......

void int_swap(int *n, int *m){
  int temp; 
  temp = *n; 
  *n = *m; 
  *m = temp; 
}

我只是想让它交换 2 个整数。这纯粹是一个学习练习。

效果很好。我只是想知道对于较大类型的对象是否有更好的方法来执行此操作。可以在不创建临时文件的情况下完成吗?

最佳答案

异或交换不需要中间变量:

https://en.wikipedia.org/wiki/XOR_swap_algorithm

来自维基页面:

 void xorSwap (int *x, int *y) {
     if (x != y) {
         *x ^= *y;
         *y ^= *x;
         *x ^= *y;
     }
 }

尽管大多数现代编译器会自动优化您的代码,因此您的编译器可能已经选择了交换两个变量的最有效方法。请参阅 wiki 文章中的“实践中避免的原因”部分。

关于c++ - C++ 的更好的 ow level int 交换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32983688/

相关文章:

c++ - 使用 QPrintPreviewDialog 时内容不显示预览

c++ - 我们什么时候不应该在构造函数中使用初始化列表?

c++ - std::set 使用初始化列表插入

c - 尝试理解交换两个 int 值的函数

java - 交换数组java的两个邻域元素

c++ - 为什么这个构造函数要这样写?

c++ - 将字节数组转换为具有字节序问题的指针

ios - 将对象的Obj-C设置值作为参数发送

c - 'pre' - 分配指针但尚未使用是什么意思?

c - 使用指针交换 int 数组值