让人泪奔的方法:两个变量在不使用其他变量的情况下进行数据交换

这是个很经典很多时候都会用到的问题,但是容易被忘记。在这里做个笔记:

int a = 1;
int b = 2;
inline void Swap(int &a,int &b)

{
    if(a!=b)
   
{
      
  a=a^b;
   
     b=a^b;
 
     a=a^b;
  
  }

}

^是异或XOR运算符;

优化后:

int &swap(int &a, int &b)
{
    return (b ^= a ^= b ^= a);
}

这样就实现了交换

方法一

void swap(int *p, int *q)
{
    *p = *p + *q;
    *q = *p - *q;
    *p = *p - *q;
}

方法二

void swap(int *p, int *q)
{
    *p = *p + *q - (*q = *p);
}

posted @ 2013-10-24 14:10  shoneworn  阅读(237)  评论(0编辑  收藏  举报