基本类型的通用交换方法
本文关键字:交换 方法 类型 | 更新日期: 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