今天总结一下交换两个数的方法,以前自己只会一种,最近在准备招聘会,分享一下自己的所获;
方法1:使用函数传址:
1 void swap(int *p1, int *p2)
2 {
3 int tmp;
4
5 tmp = *p1;
6 *p1 = *p2;
7 *p2 = tmp;
8 }
方法二:在C++中传引用
1 void swap(int &x, int &y)
2 {
3 int tmp ;
4 tmp = x;
5 x = y;
6 y = tmp;
7 }
方法三:不使用中间变量
void swap(int a, int b)
{
a = a+b;
b = a-b;
a = a-b;
}
方法四:上述代码可能会产生溢出,改进为
void swap(int *p1, int *p2)
{
if(*p1 != *p2)
{
*p1 ^= *p2;
*p2 ^= *p1;
*p1 ^= *p2;
}
}
其中if判断是必须的,否则当有多个数或者两个数相等时会改变原来的值。
方法五:使用宏定义1
#define SWAP(a, b) {if((a) != (b)) {(a)=(a)+(b);(b)=(a)-(b);(a)=(a)-(b);}}
方法六:使用宏定义2
1 #define SWAP(a, b) {if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}
#define SWAP(a, b) do{if((a) != (b)) {(a) ^= (b);(b) ^= (a);(a) ^= (b);}}while(0)
do{......}while(0)用于封装语句序列并确保正确性。
原文链接: https://www.cnblogs.com/philospy/p/4093424.html
欢迎关注
微信关注下方公众号,第一时间获取干货硬货;公众号内回复【pdf】免费获取数百本计算机经典书籍
原创文章受到原创版权保护。转载请注明出处:https://www.ccppcoding.com/archives/153615
非原创文章文中已经注明原地址,如有侵权,联系删除
关注公众号【高性能架构探索】,第一时间获取最新文章
转载文章受原作者版权保护。转载请注明原作者出处!