为什么没有c标准的memswap函数,可能看起来像:
int memswap(void *ptr1, void *ptr2, size_t nbytes)?
我知道写起来很容易,但我认为libc可以做一些很棒的技巧来加速它,就像有些实现为memcpy做的那样。
答案 0 :(得分:11)
我认为因为不经常需要它。但是,在C ++中有一种简单的方法:
#include <algorithm>
swap_ranges(ptr1, ptr1 + nbytes, ptr2)
它可能不像内置的编译器那样优化,但它有可能比你自己编写的循环更快,因为它可能具有你不会实现的特定于平台的优化。
你需要注意上面的内容,因为它假设ptr1和ptr2是char指针。更常规的做法是:
#include <algorithm>
swap_ranges(ptr1, ptr1 + num_items, ptr2)
答案 1 :(得分:9)
这不是常规所需要的。
可能已经考虑并放弃了这些想法,因为很难想出一种通用的算法。不要忘记C是一种古老的语言,扩展需要普遍有用。
可能的错误情况: -
最佳算法可能还取决于您正在做什么,因此可以直接由您更好地编码。
答案 2 :(得分:3)
可能因为它不经常需要 - 我经常记得和记忆,但我不知道如果可以的话,我曾经使用过memswap。
答案 3 :(得分:3)
在C编程中可能不经常需要它,在C ++中,在类成员中,交换是常规事情,std::swap算法针对不同类型进行了高度优化。
答案 4 :(得分:-2)