关于swap的两种实现的说明

来源:互联网 发布:同步英语听力软件推荐 编辑:程序博客网 时间:2024/06/15 01:06

最近发现大量博客上面关于交换函数的实现,基本上都给出了两种方式,一种是C++函数库已经实现的。另一种用异或实现。


1,最通用的模板交换函数模式:创建临时对象,调用对象的赋值操作符

void swap(int  &a, int &b) {        int temp ;        temp =a;        a = b;        b = temp;}

需要构建临时对象,一个拷贝构造,两次赋值操作。


2,针对int型优化:

void swap(int  &a, int &b) {        a ^= b;        b ^= a;        a ^= b;}


无需构造临时对象,异或。


实际实验发现第二种方式存在漏洞,实验如下:

#include #include using namespace std;void swap(int & a, int & b)                        {        a ^= b;        b ^= a;        a ^= b;}int main(){        int a[2] = {2,2};        cout<


从结果可以看出当两个参数为同一个引用的时候,结果会直接改为零。所以该种实现方式应慎用。



原创粉丝点击