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  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  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  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  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类型的变量,此时编译就会出错。

你可能感兴趣的:(知识综合)