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

posted @ 2017-08-15 15:33  王大咩的图书馆  阅读(52924)  评论(0编辑  收藏  举报