使用swap()无须中间变量

ZDNet软件频道 时间:2003-07-17 作者:ZDNet China |  我要评论()
本文关键词:cpptips
经典的swap()算法可由几种方法实现,它们中的某些放弃了创建中间变量这一过程。让我们来研究一下这些实现swap()的例子并评价一下它们的价值。
本文译自Builder.com,未经许可请勿转载 经典的swap()算法可由几种方法实现,它们中的某些放弃了创建中间变量这一过程。让我们来研究一下这些实现swap()的例子并评价一下它们的价值。

通常看到的最普通的swap()实现方法如下:

template<class T> void v_swap(T& t1, T& t2)//textbook swap
{
 T temp=t1;
 t1=t2;
 t2=temp;
}

这种方法用到了std::swap()的STL函数模板,虽然这种方法是有效的、可读的,但是一些程序员依旧认为,要摆脱创建中间变量,必须创建一套更有效的算法。

为了避免创建中间变量,我们运用操作符+=和-=,因此要在一个单独的表达式中执行这两个操作符。下面的例子就是这个函数模块实现的全部过程。

template <class T> void swap(T& i, T& j) //no temporary
{
   i -= j;
   j += i; // j gets the original value of i
   i = (j - i); // i gets the original value of j
}

从可读性来说,这个方法比前一种更隐秘,从性能来说,两种方法都差不多。当前一种方法应用与浮点数参数,或者自定义类型重载操作符+=和-=的时候,它比std::swap()慢的多。

在大学的考试中或者在面试的时候考官要你写出一个swap()函数而不创建中间变量的时候,这种方法显得特别有效。

在创建代码中使用std::swap()是可取的,它不仅是可读的,而且是有效的,更重要的是你不用使用临时变量。



责任编辑:炒饭

欢迎评论或投稿


百度大联盟认证黄金会员Copyright© 1997- CNET Networks 版权所有。 ZDNet 是CNET Networks公司注册服务商标。
中华人民共和国电信与信息服务业务经营许可证编号:京ICP证010391号 京ICP备09041801号-159
京公网安备:1101082134