C++中两个数值交换的几种方法

来源:互联网 发布:java递归排序问题 编辑:程序博客网 时间:2024/05/17 05:09


#include<iostream>
#include<cmath>
using namespace std;
#define swap0(a,b)     \
{                        \
    int t=a;          \
    a=b;              \
    b=t;               \
}/*引入第三变量法("\"为连接符,在其后不能有空格或其它字符;用宏定义的方法使得数据交换比函数更有效率)*/

#define swap1(a,b)  \
{                         \
    a=a+b;          \
    b=a-b;           \
    a=a-b;           \
}/*加减法*/

#define swap2(x,y)   \
{                         \
      x=x^y;           \
      y=x^y;           \
      x=x^y;           \
}/*异或法(异或运算符,位值相同为0,不同为1) //^(异或)只能对int,char..*/

/*经测试,宏定义里的参数最多用两次,如swap0与swap1里的a,b*/
 
void swap3(int *a,int *b) 

    int t; 
    t=*a; 
    *a=*b; 
    *b=t; 
} /*引入第三变量指针法(若定义中间值*t,需让*t有空间,即指向一个变量)*/

void swap4(int* a,int* b) 

    *a=*a+*b; 
    *b=*a-*b; 
    *a=*a-*b; 
} /*指针加减法*/

void swap5(int* a,int* b) 

   *a^=*b; 
   *b^=*a; 
   *a^=*b; 
} /*异或指针法*/

void swap6(int *a,int *b) 
{                  
   *a^=*b^=*a;       
   *b^=*a;           
}/*连写的异或指针法*/

 
int main()
{
     int x=9,y=7;
     swap(x,y);/*直接调用cmath中的swap函数*/
     cout<<x<<" "<<y<<endl<<endl;
     
      return 0;
}

1 0
原创粉丝点击