问题:
不借助第三个变量,两个变量直接进行数据交换。
代码:
template<typename _ty>
void swap_ (_ty& a, _ty& b) {
//
#if 1
a = a + b;
b = a - b;
a = a - b;
#else
//
a = a ^ b;
b = a ^ b;
a = a ^ b;
#endif
}
调用演示:
int main() {
//
std::cout << __FILE__ << std::endl;
//
int i0 = 5, i1 = 6;
float f0 = 3.2, f1 = -1.8;
//
std::cout << "swap before:" << i0 << ", " << i1 << std::endl;
swap_<int> (i0, i1);
std::cout << "swap after:" << i0 << ", " << i1 << std::endl;
//
std::cout << "swap before:" << f0 << ", " << f1 << std::endl;
swap_<float> (f0, f1);
std::cout << "swap after:" << f0 << ", " << f1 << std::endl;
return 0;
}
结果:
d:\mylaf\project\vs2013\project_code\testvirtualinputv2\mainvirtualinputv2.cc
swap before:5, 6
swap after:6, 5
swap before:3.2, -1.8
swap after:-1.8, 3.2
扩展:
复杂类型的的直接数据交换。