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

转载于:https://www.cnblogs.com/thinknothing/p/4023869.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值