1. 程式人生 > >C++中swap函數

C++中swap函數

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函數