Swap()-- C++ 几种交换函数
C++几种交换函数写法
一、简单交换
此方法为按值传参。
将a b分别拷贝一份副本传递给Swap(),并未对真实的a b进行操作。
所以这是一种不成功的交换函数。
#include <iostream>
using namespace std;
void Swap(int,int);
int main()
{
int a =1;
int b =10;
cout<<"直接交换:"<<endl;
cout<<"未交换前:a="<<a<<",b="<<b<<endl;
Swap(a,b);
cout<<"交换后:a="<<a<<",b="<<b<<endl;
return 0;
}
void Swap(int x,int y){
int temp = x;
x = y;
y = temp;
}
直接交换:
未交换前:a=1,b=10
交换后:a=1,b=10
二、传指针交换(C/C++)
#include <iostream>
using namespace std;
void Swap(int *,int*);
int main()
{
int a =1;
int b =10;
cout<<"传指针交换:"<<endl;
cout<<"未交换前:a="<<a<<",b="<<b<<endl;
Swap(&a,&b);
cout<<"交换后:a="<<a<<",b="<<b<<endl;
return 0;
}
void Swap(int *x,int *y){
int temp = *x;
*x = *y;
*y = temp;
}
传指针交换:
未交换前:a=1,b=10
交换后:a=10,b=1
三、定义宏(C/C++)
主要在C语言中使用。C++中不建议使用
#include <iostream>
#define SWAP(x,y,t) ((t)=(x),(x)=(y),(y)=(t)) //宏定义默认大写
using namespace std;
int main(){
int a = 1;
int b = 11;
int temp;
cout<<"使用宏定义交换:"<<endl;
cout<<"未交换前:a="<<a<<",b="<<b<<endl;
SWAP(a,b,temp);
cout<<"交换后:a="<<a<<",b="<<b<<endl;
}
使用宏定义交换:
未交换前:a=1,b=11
交换后:a=11,b=1
四、传引用交换(仅C++)
引用 就是别名
#include <iostream>
using namespace std;
void Swap(int &,int &);
int main()
{
int a =1,b =10;
cout<<"传引用交换:"<<endl;
cout<<"未交换前:a="<<a<<",b="<<b<<endl;
Swap(a,b);
cout<<"交换后:a="<<a<<",b="<<b<<endl;
return 0;
}
void Swap(int &x,int &y){
int temp = x;
x = y;
y = temp;
}
传引用交换:
未交换前:a=1,b=10
交换后:a=10,b=1
五、使用std::swap()函数交换(仅C++)
using namespace std;
此为 std 命名空间里的标准函数
现在可以直接写swap(),而不需要写std::
#include <iostream>
using namespace std;
int main(){
int a = 1;
int b = 2;
cout<<"使用std::swap()模版函数交换:"<<endl;
cout<<"未交换前:a="<<a<<",b="<<b<<endl;
std::swap(a,b);
cout<<"交换后:a="<<a<<",b="<<b<<endl;
return 0;
}
使用std::swap()模版函数交换:
未交换前:a=1,b=2
交换后:a=2,b=1
总结:
std::swap()函数、宏定义函数
对于任何类型的数据都可以使用,而其他的交换函数只能够用于已经定义的函数类型。