基本类型的通用交换方法

本文关键字:交换 方法 类型 | 更新日期: 2023-09-27 18:15:52

我到处找了,但没有找到对我有用的东西。

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

你知道原始类型有不同的大小,所以如果我们把它们传递给像void *这样的东西,那么我们怎么知道它们的大小呢?(也许需要一个额外的参数来决定它们的大小?)

C#中,它可能是这样的:

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

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

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

基本类型的通用交换方法

如果类型确实是原始类型,则可以使用异或交换算法。

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