为什么没有c标准的内存交换函数,它可能看起来像这样:
int memswap(void *ptr1, void *ptr2, size_t nbytes)?
我知道这很容易写,但我认为libc可以做一些很棒的技巧来加速它,就像一些实现为memcpy所做的那样。
发布于 2008-09-21 15:21:51
这不是例行公事需要的。
这些想法可能已经被考虑和丢弃了,因为很难提出一个通用的算法。别忘了,C语言是一门古老的语言,扩展必须是通用的。
可能的错误条件:-
当要交换的范围重叠时的空指针行为
最佳算法也可能取决于您正在做什么,因此可以由您直接编写更好的代码。
使用temp结构和assignment
发布于 2008-09-20 20:38:58
我想是因为它不是经常需要的。但是,在C++中有一种简单的方法可以做到这一点:
#include <algorithm>
swap_ranges(ptr1, ptr1 + nbytes, ptr2)
它可能不像内置的编译器那样优化,但它有可能比你自己编写的循环更快,因为它可能有你不会实现的特定于平台的优化。
您需要小心使用上面的代码,因为它假设ptr1和ptr2是字符指针。更规范的方法是:
#include <algorithm>
swap_ranges(ptr1, ptr1 + num_items, ptr2)
发布于 2008-09-20 20:24:03
可能是因为我不经常需要memset和memcpy,但我不知道我会不会用过memcpy。
https://stackoverflow.com/questions/109249
复制相似问题