原始类型的通用交换方法

时间:2013-05-28 23:19:23

标签: c# objective-c

我一直在寻找,但对我来说没有任何用处。

ObjectiveC中编写交换方法以交换两个原始值的最佳方法是什么?

你知道原始类型有不同的大小,所以如果我们通过void *之类的东西传递它们,那么我们怎么知道它们的大小呢? (也许是他们大小的一个额外参数?)

C#中的

,可能是这样的:

void Swap<T>(ref T a, ref T b)
{
    T tmp = a;
    a = b;
    b = tmp;
}

一个想法可能是创建一个具有相同大小的输入类型的临时内存块,然后使用memcpy之类的方法将它们复制为内存块。

但我更喜欢ObjectiveC中更自然的东西,如果有更好的东西。

1 个答案:

答案 0 :(得分:0)

如果类型确实是基元,则可以使用XOR交换算法。

x = x ^ y;
y = x ^ y;
x = x ^ y;

在宏中,这可能如下所示:

#define SWAP(a, b) (a^=b;b^=a;a^=b;)

但是应该始终注意宏。

否则,您可以尝试:https://stackoverflow.com/a/3982430/2471910