博客
关于我
std::swap C++11示例
阅读量:278 次
发布时间:2019-03-01

本文共 1059 字,大约阅读时间需要 3 分钟。

C++11中的std::swap函数是一个强大的工具,它在

头文件中定义。这个函数用于高效地交换两个对象的内容,而无需显式创建临时变量。

std::swap的两个版本

std::swap函数有两个版本:

  • 非数组版本

    模板函数定义为:

    template
    void swap(t& a, t& b) noexcept( is_nothrow_move_constructible
    ::value && is_nothrow_move_assignable
    ::value);

    这个版本用于交换两个对象的内容。它利用了移动构造和移动赋值的特性,确保交换过程不会导致异常。

  • 数组版本

    另一个版本用于交换两个数组的内容:

    template
    void swap( t (&a)[n], t (&b)[n]) noexcept(noexcept(swap(*a, *b)));

    这个版本适用于数组类型,确保在交换数组时不会抛出异常。

  • std::swap的实现原理

    std::swap函数的实现通常依赖于移动操作。对于非数组版本,交换操作可以通过以下步骤完成:

  • 创建一个临时对象c,使用std::move移动a的内容。
  • 将b的内容移动到a中。
  • 将c的内容移动到b中。
  • 这种方法确保了操作的高效性和安全性。

    注意事项

    在使用std::swap时,需确保交换的类型T具备以下特性:

    • 移动构造可抛出:即T可以通过移动操作创建而不导致异常。
    • 移动赋值可抛出:即T可以通过移动操作赋值而不导致异常。
    • (对于版本(2)):交换数组时,T必须定义swap函数。

    示例

    以下是一个使用std::swap的示例:

    #include 
    #include
    int main() { int x = 10, y = 20; std::swap(x, y); // x和y交换内容 std::vector
    foo(4, x), bar(6, y); // foo包含4个20,bar包含6个10 std::swap(foo, bar); // foo和bar交换内容 // foo现在包含6个10,bar包含4个20}

    这个示例展示了如何在实际应用中使用std::swap来高效交换对象和数组的内容。

    转载地址:http://xkqx.baihongyu.com/

    你可能感兴趣的文章
    poj 3539 Elevator——同余类bfs
    查看>>
    Qt笔记——官方文档全局定义(三)Macros宏
    查看>>
    poj 3628 Bookshelf 2
    查看>>
    Qt笔记——官方文档全局定义(一)Types数据类型
    查看>>
    POJ 3670 DP LIS?
    查看>>
    POJ 3683 Priest John's Busiest Day (算竞进阶习题)
    查看>>
    POJ 3988 Selecting courses
    查看>>
    POJ 4020 NEERC John's inversion 贪心+归并求逆序对
    查看>>
    poj 4044 Score Sequence(暴力)
    查看>>
    POJ 基础数据结构
    查看>>
    POJ 题目3020 Antenna Placement(二分图)
    查看>>
    Poj(1797) Dijkstra对松弛条件的变形
    查看>>
    SpringBoot为什么不需要xml配置文件?
    查看>>
    POJ--2391--Ombrophobic Bovines【分割点+Floyd+Dinic优化+二分法答案】最大网络流量
    查看>>
    Qt笔记——SQLite初探QSqlDatabase QSqlQuery
    查看>>
    POJ-1163-The Triangle
    查看>>
    POJ-Fence Repair 哈夫曼树
    查看>>
    poj1061 - 同余方程,二元一次不定方程
    查看>>
    Qt笔记——SQLite再探
    查看>>
    poj1068Parencodings
    查看>>