今天在B站看到 小学生Vita君 的视频,学习到交换变量的几个方法
//方法一
// 若是定义为string,可交换字符串
int a = 10,b = 20;
int temp = a;
a = b;
b = temp;
cout << "a: " << a << endl; //a: 20
cout << "b: " << b << endl; //b: 10
//方法二
//字符串 只有 +(拼接)操作吗,没有 - 操作,所以该方法不能进行字符串交换,
//但是可以交换字符,因为字符的 +- 操作 是 转为为 整形操作的
int a = 10,b = 20;
a += b;
b = a - b;
a -= b;
cout << "a: " << a << endl; //a: 20
cout << "b: " << b << endl; //b: 10
//方法三
// 不可交换 字符串,可交换字符
/*
异或(^)xor
相同得0,不同为1;
例如: A: 0011 1100
B: 0000 1101
A ^ B: 0011 0001
A ^ B ^ B : 0011 1100
可以发现,当 A 异或 B 时,所得到的 结果 再 异或 B, 就还可以得到A。
即 一个数 异或 另外 一个数两次 的时候,可以得到 原来的数。
利用这个规律,即可交换A 与 B
*/
int a = 10,b = 20;
a ^= b; // a 先 保存 a ^ b
b ^= a; // a 异或两次 b 即可得到 a
a ^= b; // b 异或 两次 a 即可得到 b
cout << "a: " << a << endl; //a: 20
cout << "b: " << b << endl; //b: 10
'''
在 python 中,叫做 多重赋值
可交换字符 和 字符串
'''
a = 1
b = 2
a,b = b,a #即 将 b 的值 赋值 给 a, a 的值 赋值 给 b
print(a,b) # 2 1
a = 123
b = 456
c = 789
d = 147
a,b,c,d = d,c,a,b # 将d 的值赋值 给 a,将c 的值赋值 给 b,将a的值赋值 给 c,将b 的值赋值 给 d
print(a,b,c,d) #147 789 123 456
说的好,但是为什么不直接
swap(a,b)
呢?学习思想吧,swap实现不也是 人写的嘛
也对,不能太吹毛求疵了,写的很好,祝您编程学习一路顺风,加油!