C++ 四种数据交换的函数
//使用异或操作实现原位数据交换
//只对整数有效!!
//引用+异或 方法1
void myswap(int &a, int &b){
a = a^b;
b = a^b;
a = a^b;
}
//原位数据交换 不借助第三个变量
//只适用于简单同种单一类型的数据(如int\float\double\char)
//引用+“+-”四则运算符 方法2
template<class T>
void myswap1(T &a, T &b){
a = a + b;
b = a - b;
a = a - b;
}
//不仅使用与简单的同种数据类型(如int\float\double\char)之间的数据交换,还适用于类对象之间的交换数据
//引用+第三者 中间转换变量 方法3
template<class T>
void myswap2(T &a, T &b){
T t;
t = a, a = b, b = t;
}
//不仅使用与简单的同种数据类型(如int\float\double\char)之间的数据交换,还适用于类对象之间的交换数据
//指针+第三者 中间转换变量 方法4
template<class T>
void myswap3(T *a, T *b){
T t;
t = *a, *a = *b, *b = t;
}
说明:
(1)方法3、方法4是我们常用的交换数据的函数。
相关实例:交换类对象函数可以移步到 C++ 模板化的student类对象的直接插入排序, 运算符重载,模板,两种模板化的交换数据函数
(2)方法1、方法2 只用到了 两个形参变量,没有用到新的变量,挺有意思。
实例:a=10,b=8;
方法1:
交换a,b
a = 10 (1010)
b = 8 (1000)
step1: a = a ^ b;
1010
^ 1000
-------------
0010
此时,a = 2 (0010)
step2: b = a ^ b;
0010
^ 1000
-------------
1010
此时,b = 10 (1010)
step3: a = a ^ b;
0010
^ 1010
-------------
1000
此时,a = 8 (1000), b = 10 (1010)
实现了数据交换
方法2:
a=10,b=8;
step1: a = a+b; 此时, a=10+8=18
step2: b = a-b; 此时, b=18-8=10,
step1: a = a-b; 此时, a=18+10=8, b=10
实现了数据交换