在练习写排序算法时,写了个交换数据函数,本来简简单单一个函数,按照如下写法简单可行:
void swap(int &a, int &b) {
int tmp = a;
a = b;
b = tmp;
}
可我脑子一热,想到可以不开辟另外的空间,进行交换操作,便有了下面代码:
void swap(int &a, int &b) {
a = a + b;
b = a - b;
a = a - b;
}
乍一看好像也没什么毛病,但实际上有个严重的细节错误,先看如下代码输出:
#include <iostream>
using namespace std;
void swap(int &a, int &b) {
a = a + b;
b = a - b;
a = a - b;
}
int main() {
int a = 3, b = 3;
swap(a, b);
cout << a << " "<< b << endl; // 输出 3,3,没毛病
swap(a, a);
cout << a << endl; // 输出0,这tm!!!!!!!!!!!!!
return 0;
}
看到输出就明白自己犯了这么傻的错误,自己和自己交换的时候把自己变成了0,相同数据交换虽然也能得到正确结果,但也没必要,交换改进后代码如下:
void swap(int &a, int &b) {
if (a == b) return;
a = a + b;
b = a - b;
a = a - b;
}
所以,以后别乱秀,小心秀死自己O(∩_∩)O~~
网友评论