9.4.3  两值交换

9.4.3 两值交换

算法swap()用于交换两个对象的值。其泛型化版本定义于头文件<algorithm>中。

978-7-111-51399-5-Chapter09-71.jpg

运用该函数可以交换任意两个变量。

978-7-111-51399-5-Chapter09-72.jpg

只有当swap()函数所依赖的copy()构造操作和assignment操作行为存在时,调用该算法才有效。swap()的最大优势在于:透过模板特化或函数重载,为更复杂的型别提供特殊的实作版本。这样既可以交换对象内部成员,又不必反复赋值,大大节约了时间。标准程序库中所有容器及strings均使用了这项技术。

前面讲述算法的章节已经讲述了swap()的使用,调用算法swap()不必反复赋值即可交换两容器的值,从而提高了效率。对于自定义型别,swap()算法也确实能够提高效率。此时需要义不容辞地提供swap的特化版本,即自定义的交换算法,详见例9-8。

例9-8

978-7-111-51399-5-Chapter09-73.jpg

978-7-111-51399-5-Chapter09-74.jpg

978-7-111-51399-5-Chapter09-75.jpg

例9-8的执行结果为:

978-7-111-51399-5-Chapter09-76.jpg

提示

在阅读本例题时,读者应注意指针的用法和自定义myassign()函数。本例题主要是通过自定义容器和自定义交换算法来实现两个对象的交换的。