通常看到的最普通的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()是可取的,它不仅是可读的,而且是有效的,更重要的是你不用使用临时变量。