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()函数、宏定义函数
对于任何类型的数据都可以使用,而其他的交换函数只能够用于已经定义的函数类型。

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值