本文是我用到swap函数时,对其产生好奇,所以结合网上有关博文写下的。个人水平有限,若有错误的地方,欢迎留言指出。谢谢!
一、通用的函数交换模板
1 template<class T> 2 void swap(T &a,T &b) 3 { 4 T c(a); 5 a=b; 6 b=c; 7 }
T为类型,可根据实际需要使用相应的类型
二、针对int类型的优化
使用异或,整数异或本身为结果0;一个数异或0结果为本身;
1 void swap(int &a,int &b) 2 { 3 a^=b; 4 b^=a; //相当于b=a 5 a^=b; //相当于a=b 6 }
三、自定义swap时,注意事项
1、达不到交换的作用
1 void swap(int a,int b) 2 { 3 int temp=a; 4 a=b; 5 b=temp; 6 }
这里只是交换了a和b实参的副本,而它们本身没有交换。
2、能达到交换的作用
1 void swap(int *a,int *b) 2 { 3 int temp; 4 temp=*a; 5 *a=*b; 6 *b=temp; 7 } 8 9 //使用 10 int main() 11 { 12 int a=1,b=2; 13 swap(&a,&b); 14 return 0; 15 }
注意,第三行中,不要将temp定义为一个指针,因为没有初始化指针而去使用它很危险。
Ref: