swap()

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

注意: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中方法较好,因为不会溢出,而一个内存变量空间的耗费在普通工程应用中不值一提。

posted @ 2014-10-14 10:33  想什么想  阅读(176)  评论(0编辑  收藏  举报