Swap函数实现

Swap函数

  • 基本实现

    1)一般实现(需临时变量)

    // 引用实现
    Swap1(int &x, int &y)
    {
        int temp;
        temp = x;
        x = y;
        y = temp;
    }
    // 调用
    int x = 5;
    int y = 6;
    Swap1(x, y);
    
    // 指针实现
    Swap1(int *x, int *y)
    {
        int temp;
        temp = *x;
        *x = *y;
        *y = temp; 
    }
    // 调用
    int x = 5;
    int y = 6;
    Swap1(&x, &y);
    

    2)利用异或操作实现(不需临时变量)

        // 引用实现
        void Swap2(int &x, int &y)
        {
            x ^= y;
            y ^= x;
            x ^= y;
        }
        // 调用
        int x = 5;
        int y = 6;
        Swap2(x, y);
    
        // 指针实现
        void Swap2(int *x, int *y)
        {
            *x ^= *y;
            *y ^= *x;
            *x ^= *y;
        }
        // 调用
        int x = 5;
        int y = 6;
        Swap2(&x, &y);
    

    3)利用加减操作实现(不需临时变量)

        // 引用实现
        void Swap3(int &x, int &y)
        {
            x = x + y;
            y = x - y;
            x = x - y;
        }
        // 调用
        int x = 5;
        int y = 6;
        Swap3(x, y);
    
        // 指针实现
        void Swap3(int *x, int *y)
        {
            *x = *x + *y;
            *y = *x - *y;
            *x = *x - *y;
        }
        // 调用
        int x = 5;
        int y = 6;
        Swap3(&x, &y);
    
  • 宏定义实现

    #define swap(x, y) { x ^= y; y ^= x; x ^= y; }
    #define swap(x, y) { x = x + y; y = x - y; x = x - y; }
    // 调用
    int x = 5;
    int y = 6;
    swap(x, y);
    
  • 模板实现

    1)一般实现(需临时变量)

    // 引用实现
    template <class T> void Swap(T& x, T& y)
    {
        T temp;
        temp = x;
        x = y;
        y = temp;
    }
    // 调用
    double x = 5.5;
    double y = 6.5;
    Swap(x, y);
    
    // 指针实现
    template <class T> void Swap(T* x, T* y)
    {
        T temp;
        temp = *x;
        *x = *y;
        *y = temp;
    }
    // 调用
    double x = 5.5;
    double y = 6.5;
    Swap(&x, &y);
    

    2)利用加减操作实现(不需临时变量)

    // 引用实现
    template <class T1,  class T2> void Swap(T1& x, T2& y)
    {
        x = x + y;
        y = x - y;
        x = x - y;
    }
    // 调用
    double x = 5.5;
    double y = 6.5;
    Swap(x, y);
    
    // 指针实现
    template <class T1,  class T2> void Swap(T1* x, T2* y)
    {
        *x = *x + *y;
        *y = *x - *y;
        *x = *x - *y;
    }
    // 调用   
    double x = 5.5;
    double y = 6.5;
    Swap(&x, &y);
    

注意:由于异或实现,是针对整数实现的,故不建议利用模板实现。原因:当用模板方式实现利用异或方法交换两个数,调用时,交换函数传入两个double类型的变量,此时编译就会出错。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值