几个不同于引入第三方变量的交换方法。。
利用异或运算实现
#include<iostream>
using namespace std;
int main()
{
int a = 4;
int b = 5;
cout << "a= " << a << endl;
cout << "b= " << b <<endl;
a = a ^ b;
b = a ^ b;
a = a ^ b;
cout << "改变后:\n";
cout << "a= " << a << endl;
cout << "b= " << b <<endl;
return 0;
}
利用位运算交换
#include<iostream>
using namespace std;
int main()
{
int a = 4;
int b = 5;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
cout << "改变后:\n";
b = (int64_t)((int64_t)a << 32 | (a = b)) >> 32;
cout << "a= " << a << endl;
cout << "b= " << b << endl;
}
其中a的值原来是32位,之后强行转换为64位之后,将a的值向左移动了32位,然后再将b的值赋给a原来的内存中,再进行或运算,进行完或运算之后,64位中,低位是b原来的值,此时再将整个结果向右移动32位,再强制转换为int64_t类型赋给b。此时输出a,b完成交换。其中的强制类型转换相当于提供了一个多余的空间来提供两个变量进行交换,强制转换是在原来的基础上扩增一段空间而已。
利用栈实现
利用先进后出的思路
#include<iostream>
using namespace std;
int main()
{
int a,b;
push(stack,a);
push(stack,b);
pop(stack,&b);
pop(stack,&a);
}