两个整型变量的交換

有这么一个问题,不知道大家碰到过没有:

问题描述:在不分配内存空间的前提下,交换两个元素的值。

我们平时都是这样写的:

int temp = a;
a = b;
b = temp;

我喜欢简洁,通常直接使用C++模板函数这么写:

std::swap(a, b);

而如果不能分配空间,该怎么写呢?

  • 方法一:
x = x+y; y = x-y; x= x-y;                

可以简写为:

x += y; y = x-y; x -= y;
  • 方法二:
x = x-y; y =x+y; x = y-x;

可以简写为:

x -= y; y +=x; x = y-x;
  • 方法三:
x = x^y; y = x^y; x = x^y;

可以简写为:

x ^= y; y ^= x; x ^=y;

第三种方法的确很巧妙,首先它好记忆,相当对称,然后它不会有越界问题,而且位运算有很好的效率。

今天看帖时,又看到一个类似问题,要求用一条语句完成两个整数的交換,发现有人将方法三进行了又一次简写,表示震撼:

x ^= y ^= x ^= y;

创新意识,融入改造之中!

测试代码:

#include <iostream>
using namespace std;
int main()
{
     int a = 1;
     int b = 99;
     cout<<a<<" "<<b<<endl;
     a ^= b ^= a ^= b;
     cout<<a<<" "<<b<<endl;
     return 0;
}

特别mark一下,在python和lua里,下面的写法比其他任何写法都简洁、节省且高效:

a, b = b, a
发表于 2010年04月26日 03:27   评论:0   阅读:1628  



回到顶部

首页 | 关于我 | 关于本站 | 站内留言 | rss
python logo   django logo   tornado logo