有这么一个问题,不知道大家碰到过没有:
问题描述:在不分配内存空间的前提下,交换两个元素的值。
我们平时都是这样写的:
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