C++中swap函數
阿新 • • 發佈:2017-08-15
tar 博文 針對 定義 turn clas 作用 col 留言
本文是我用到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:
http://blog.csdn.net/ryfdizuo/article/details/6435847
http://blog.csdn.net/duan_jin_hui/article/details/50879338
C++中swap函數