代码题--C++--交换数字swap的几种实现
1.借用临时变量实现swap
此种方法,最常见。
使用起来,虽然效率低,但是也没什么限制。
#include <iostream>
using namespace std;
void swap1(int* a, int* b)
{
int temp;
temp = *a;
*a = *b;
*b = temp;
}
void swap2(int& a, int& b)
{
int t = a;
a = b;
b = t;
}
int main()
{
int a = 3, b = 4;
swap1(&a,&b);
//swap2(a, b);
cout << a <<" " << b << endl;
return 0;
}
结果:
2.利用异或操作的特性实现swap
#include <iostream>
using namespace std;
void swap3(int* a, int* b)
{
*a = *a ^ *b;
*b = *b ^ *a;
*a = *a ^ *b;
}
void swap4(int& a, int& b)
{
if (&a != &b)
{
a ^= b;
b ^= a;
a ^= b;
}
}
int main()
{
int a = 3, b = 4;
swap3(&a, &b);
//swap4(a, b);
cout << a <<" " << b << endl;
return 0;
}
3.利用乘除操作实现swap
注意:缺点:此处出了要保证*a X *b 没有溢出之外,还要保证*b不能为0,而且*a也不能为0,否则也不能实现swap功能。
#include <iostream>
#include <assert.h>
using namespace std;
void swap5(int* a, int* b)
{
/* makesure b != 0 */
assert(b != 0);
*a = (*a) * (*b);
*b = (*a) / (*b);
*a = (*a) / (*b);
}
int main()
{
int a = 3, b = 4;
swap5(&a,&b);
cout << a <<" " << b << endl;
return 0;
}
4.利用加减法实现swap
注意:缺点:调用此函数之前,要保证两个数相加之和不会溢出。
#include <iostream>
using namespace std;
void swap6(int* a, int* b)
{
*a = (*a) + (*b);
*b = (*a) - (*b);
*a = (*a) - (*b);
}
int main()
{
int a = 3, b = 4;
swap6(&a,&b);
cout << a <<" " << b << endl;
return 0;
}