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