我一直在寻找,但对我来说没有任何用处。
在ObjectiveC
中编写交换方法以交换两个原始值的最佳方法是什么?
你知道原始类型有不同的大小,所以如果我们通过void *
之类的东西传递它们,那么我们怎么知道它们的大小呢? (也许是他们大小的一个额外参数?)
C#
中的,可能是这样的:
void Swap<T>(ref T a, ref T b)
{
T tmp = a;
a = b;
b = tmp;
}
一个想法可能是创建一个具有相同大小的输入类型的临时内存块,然后使用memcpy
之类的方法将它们复制为内存块。
但我更喜欢ObjectiveC
中更自然的东西,如果有更好的东西。
答案 0 :(得分:0)
如果类型确实是基元,则可以使用XOR交换算法。
x = x ^ y;
y = x ^ y;
x = x ^ y;
在宏中,这可能如下所示:
#define SWAP(a, b) (a^=b;b^=a;a^=b;)
但是应该始终注意宏。