【发布时间】:2015-03-28 01:49:37
【问题描述】:
我正在尝试涵盖所有 swapfunction 实现。
在swap函数的以下实现中,不需要临时变量来交换两个参数的值:
void swapNoTemp1(int &a, int &b){
a = a + b;
b = a - b;
a = a - b;
}
或
template <class T>
void swapNoTemp2(T& i, T& j){
i -= j;
j += i;
i = (j - i);
}
或
void swapNoTemp3(int &a, int &b){
a ^= b;
b ^= a;
a ^= b;
}
因此,就使用的内存而言,它比:
void swap(int &a, int &b){
int temp = a;
a = b;
b = temp;
}
另一方面,swap 可以使用:
void swapPointers(int *i, int *j) {
int t = *i;
*i = *j;
*j = t;
}
我正在尝试比较所有现有的实现并了解它们的适用范围。
【问题讨论】:
-
不是,不是。现在你已经取缔了大量的输入对。
-
另请注意,当
&a == &b时,它甚至不适用于unsigned(没有溢出)。 -
Rewrite 使用 XOR 来避免溢出。一个不错的大评论也不会受到伤害。
-
即使避免临时的函数工作得很好,你最好的希望是在堆栈上保存
sizeof(int)分配。我非常怀疑这是否值得担心。
标签: c++ function implementation effective-c++