为什么没有c标准的memswap函数,可能看起来像:
int memswap(void *ptr1, void *ptr2, size_t nbytes)?
Run Code Online (Sandbox Code Playgroud)
我知道写起来很容易,但我认为libc可以做一些很棒的技巧来加速它,就像一些实现为memcpy做的那样.
dvo*_*rak 12
我认为因为它不经常需要.但是,有一种简单的方法可以在C++中执行此操作:
#include <algorithm>
swap_ranges(ptr1, ptr1 + nbytes, ptr2)
Run Code Online (Sandbox Code Playgroud)
它可能不像内置的编译器那样优化,但它有可能比你自己编写的循环更快,因为它可能具有你不会实现的特定于平台的优化.
你需要注意上面的内容,因为它假设ptr1和ptr2是char指针.更典型的方法是:
#include <algorithm>
swap_ranges(ptr1, ptr1 + num_items, ptr2)
Run Code Online (Sandbox Code Playgroud)
这不是常规所需的.
可能已经考虑并放弃了这些想法,因为很难想出一种通用的算法.不要忘记C是一种古老的语言,扩展需要通常有用.
可能的错误情况: -
在最好的算法可能也取决于你在做什么,所以可以得到更好的直接编码.