码迷,mamicode.com
首页 > 其他好文 > 详细

swap()

时间:2014-10-14 12:09:38      阅读:147      评论:0      收藏:0      [点我收藏+]

标签:使用   ar   sp   amp   bs   算法   c++   as   应用   

一、使用第三方变量实现变量值交换

注意:C语言中没有template,C++中有

template<class T>
void swap( T &val1, T &val2 )
{
T temp = val1;
val1 = val2;
val2 = temp;
}

template<class T>
void swap( T *v1, T *v2 )
{
T temp = *v1;
*v1 = *v2;
*v2 = temp;
}

 

二、不使用第三方变量

template<class T> void swap( T &v1, T &v2 )

{

T temp = v1 + v2;

v1 = temp - v1;

v2 = temp - v1;

}

 

说明:方法1比方法2耗费一个变量内存空间,而方法2由于存在加法可能会溢出。标准库中使用的是第1种方法。

 

三、逻辑运算法

说明:此时的T只能是int系列和char系列

template<class T>
void swap1( T &t1, T &t2 )
{
t1 = t1^t2;
t2 = t1^t2;
t1 = t1^t2;
}

此方法的原理依据(异或运算):

a^a = 0 (同则为0)

a^1 = ~a      a^0 = a

a^b^c满足交换律和结合律

 

综述,逻辑运算法相对来说可读性差,但是既不会耗费变量内存空间,又不会溢出,但是只能用于int和char系列。

第1种方法比第2中方法较好,因为不会溢出,而一个内存变量空间的耗费在普通工程应用中不值一提。

swap()

标签:使用   ar   sp   amp   bs   算法   c++   as   应用   

原文地址:http://www.cnblogs.com/thinknothing/p/4023869.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!