C++中swap函數


本文是我用到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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM