C语言有两种交换算法(指针与宏定义),C++在其基础上又新增两种交换算法(引用与模板函数),下面具体说一下。
1.使用指针 void swap(int *px,int *py)
#include <iostream>
using namespace std;
void swap(int *px,int *py);
int main()
{
int a=1,b=2;
cout<<"a="<<a<<",b="<<b<<endl;
swap(*a,*b);
cout<<"a="<<a<<",b="<<b<<endl;
return 0;
}
void swap(int *px,int *py)
{
int tmp=*px;
*px=*py;
*py=tmp;
}
2.使用宏定义 #define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
#include <iostream>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t))
using namespace std;
int main()
{
int a=1,b=2;
cout<<"a="<<a<<",b="<<b<<endl;
int tmp;
SWAP(a,b,tmp);
cout<<"a="<<a<<",b="<<b<<endl;
return 0;
}
3.使用引用 void swap(int &x,int &y)
#include <iostream>
using namespace std;
void swap(int &px,int &py);
int main()
{
int a=1,b=2;
cout<<"a="<<a<<",b="<<b<<endl;
swap(&a,&b);
cout<<"a="<<a<<",b="<<b<<endl;
return 0;
}
void swap(int &px,int &py)
{
int tmp=px;
px=py;
py=tmp;
}
4.使用模板函数 template<class T> void swap(T&x,T&y)
#include <iostream>
using namespace std;
int main()
{
int a=1,b=2;
cout<<"a="<<a<<",b="<<b<<endl;
std::swap(a,b);
cout<<"a="<<a<<",b="<<b<<endl;
return 0;
}