c++的一个更好的低级别int交换



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

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

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

很好。我只是想知道是否有更好的方法来处理大类型的对象。它能在不创建临时变量的情况下完成吗?

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

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

来自维基页面:

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

虽然大多数现代编译器会自动优化你的代码,所以有可能你的编译器已经选择了最有效的方法来交换两个变量。参见wiki文章中的"实践中避免使用的原因"一节。

void swap(int &a,int &b)
{
    a=a+b;
    b=a-b;
    a=a-b;
}

可以使用引用

template<typename T> 
void swap(T& x, T& y) 
{
    T temp = std::move(x);
    x = std::move(y);
    y = std::move(temp);
}
void swap(int & x , int& y) 
{
    if(x != y) 
        y ^= x ^= y ^= x;  
}
void swap (int& x, int& y)
{
    x += y;
    y = x - y;
    x -= y;
}

最新更新