代码之家  ›  专栏  ›  技术社区  ›  quinmars

为什么没有一个标准的memswap函数

c
  •  17
  • quinmars  · 技术社区  · 17 年前

    为什么没有c标准的memswap函数,它可能看起来像:

    int memswap(void *ptr1, void *ptr2, size_t nbytes)?
    

    5 回复  |  直到 14 年前
        1
  •  14
  •   dvorak    17 年前

    #include <algorithm>
    
    swap_ranges(ptr1, ptr1 + nbytes, ptr2)
    

    它可能不像内置的编译器那样优化,但它有可能比您自己编写的循环更快,因为它可能有您不会实现的特定于平台的优化。

    您确实需要注意上面的内容,因为它假定ptr1和ptr2是字符指针。更规范的方法是:

    #include <algorithm>
    
    swap_ranges(ptr1, ptr1 + num_items, ptr2)
    
        2
  •  6
  •   itj    17 年前

    这不是日常需要的东西。

    这些想法可能已经被考虑和抛弃,因为很难想出一个通用的算法。别忘了C是一种古老的语言,扩展通常需要有用。

    可能的错误条件:-

    • 被交换的范围重叠时的行为
    • 零长
    • 空指针

    这个 最好的 算法也可能取决于您正在做什么,等等 能够

    • 使用临时结构和赋值交换结构可能更快
    • 长度较小-可能更好地分配临时内存
    • 长长度—“分段”逐段交换(其中分段是某个最佳长度)
    • 硬件拷贝功能的使用
        3
  •  3
  •   Colen    17 年前

    可能是因为不经常需要它——我经常使用memset和memcpy,但我不知道如果有memswap,我是否会使用它。

        4
  •  3
  •   Alaric    17 年前

    在C++编程中,它可能不是经常需要的,在C++中,交换是对类成员的常规操作。 std::swap