一、使用第三方变量实现变量值交换
注意: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中方法较好,因为不会溢出,而一个内存变量空间的耗费在普通工程应用中不值一提。
时间: 2024-11-06 23:26:31