我正在学习c++,我有一个像这样的函数…
void int_swap(int *n, int *m){
int temp;
temp = *n;
*n = *m;
*m = temp;
}
我只想让它交换2个int型。这纯粹是一个学习练习。
很好。我只是想知道是否有更好的方法来处理大类型的对象。它能在不创建临时变量的情况下完成吗?
异或交换不需要中间变量:
https://en.wikipedia.org/wiki/XOR_swap_algorithm来自维基页面:
void xorSwap (int *x, int *y) {
if (x != y) {
*x ^= *y;
*y ^= *x;
*x ^= *y;
}
}
虽然大多数现代编译器会自动优化你的代码,所以有可能你的编译器已经选择了最有效的方法来交换两个变量。参见wiki文章中的"实践中避免使用的原因"一节。
void swap(int &a,int &b)
{
a=a+b;
b=a-b;
a=a-b;
}
可以使用引用
template<typename T>
void swap(T& x, T& y)
{
T temp = std::move(x);
x = std::move(y);
y = std::move(temp);
}
void swap(int & x , int& y)
{
if(x != y)
y ^= x ^= y ^= x;
}
void swap (int& x, int& y)
{
x += y;
y = x - y;
x -= y;
}