Swap函数
基本实现
1)一般实现(需临时变量)
// 引用实现 Swap1(int &x, int &y) { int temp; temp = x; x = y; y = temp; } // 调用 int x = 5; int y = 6; Swap1(x, y); // 指针实现 Swap1(int *x, int *y) { int temp; temp = *x; *x = *y; *y = temp; } // 调用 int x = 5; int y = 6; Swap1(&x, &y);
2)利用异或操作实现(不需临时变量)
// 引用实现 void Swap2(int &x, int &y) { x ^= y; y ^= x; x ^= y; } // 调用 int x = 5; int y = 6; Swap2(x, y); // 指针实现 void Swap2(int *x, int *y) { *x ^= *y; *y ^= *x; *x ^= *y; } // 调用 int x = 5; int y = 6; Swap2(&x, &y);
3)利用加减操作实现(不需临时变量)
// 引用实现 void Swap3(int &x, int &y) { x = x + y; y = x - y; x = x - y; } // 调用 int x = 5; int y = 6; Swap3(x, y); // 指针实现 void Swap3(int *x, int *y) { *x = *x + *y; *y = *x - *y; *x = *x - *y; } // 调用 int x = 5; int y = 6; Swap3(&x, &y);
宏定义实现
#define swap(x, y) { x ^= y; y ^= x; x ^= y; } #define swap(x, y) { x = x + y; y = x - y; x = x - y; } // 调用 int x = 5; int y = 6; swap(x, y);
模板实现
1)一般实现(需临时变量)
// 引用实现 template <class T> void Swap(T& x, T& y) { T temp; temp = x; x = y; y = temp; } // 调用 double x = 5.5; double y = 6.5; Swap(x, y); // 指针实现 template <class T> void Swap(T* x, T* y) { T temp; temp = *x; *x = *y; *y = temp; } // 调用 double x = 5.5; double y = 6.5; Swap(&x, &y);
2)利用加减操作实现(不需临时变量)
// 引用实现 template <class T1, class T2> void Swap(T1& x, T2& y) { x = x + y; y = x - y; x = x - y; } // 调用 double x = 5.5; double y = 6.5; Swap(x, y); // 指针实现 template <class T1, class T2> void Swap(T1* x, T2* y) { *x = *x + *y; *y = *x - *y; *x = *x - *y; } // 调用 double x = 5.5; double y = 6.5; Swap(&x, &y);
注意:由于异或实现,是针对整数实现的,故不建议利用模板实现。原因:当用模板方式实现利用异或方法交换两个数,调用时,交换函数传入两个double类型的变量,此时编译就会出错。