Swap函数实现

来源:互联网 发布:网络天才akinator很卡 编辑:程序博客网 时间:2024/04/30 00:53

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

0 0
原创粉丝点击