LiSheng's blog LiSheng's blog
首页
笔记
个人简历
随笔集
GitHub (opens new window)
首页
笔记
个人简历
随笔集
GitHub (opens new window)
  • golang

  • cplus

    • 内存相关

    • 面向对象

    • STL相关

      • map和unorder_map
      • vector、deque、list
      • 内置数据结构
      • 数据结构示例
      • go和c++对比
      • 关键字

    • leetcode

    • 存储技术

    • 分布式系统

    • 计算机网络

    • Linux操作系统

    • Redis

    • 其他

    • 笔记
    • cplus
    • STL相关
    lisheng
    2024-09-10
    目录

    vector、deque、list

    std::deque(双端队列)、std::vector(动态数组)和 std::list(双向链表)是 C++ STL 中的三种常用容器。它们各自有不同的特性和适用场景。以下是它们的对比:

    # 1. 内存结构

    • std::vector:

      • 使用连续的内存块来存储元素。
      • 适合随机访问,但在插入或删除元素时,可能需要移动大量元素。
    • std::deque:

      • 使用多个不连续的内存块(通常是链表结构)。
      • 允许在两端高效地插入和删除元素。
    • std::list:

      • 使用双向链表结构,每个元素都有指向前后元素的指针。
      • 不需要连续的内存块,适合频繁的插入和删除操作。

    # 2. 访问速度

    • std::vector:

      • 随机访问速度快,时间复杂度为 O(1)。
      • 由于内存连续,缓存友好。
    • std::deque:

      • 随机访问速度稍慢,时间复杂度为 O(1),但由于不连续的内存,可能会有缓存不友好的情况。
    • std::list:

      • 不支持随机访问,访问元素的时间复杂度为 O(n)。

    # 3. 插入和删除操作

    • std::vector:

      • 在末尾插入元素效率高(摊销时间复杂度为 O(1)),但在中间或开头插入/删除元素效率低(时间复杂度为 O(n))。
    • std::deque:

      • 在两端插入和删除元素效率高(时间复杂度为 O(1)),在中间插入/删除效率较低(时间复杂度为 O(n))。
    • std::list:

      • 在任意位置插入和删除元素效率高(时间复杂度为 O(1),前提是已知位置),但需要遍历链表找到位置(时间复杂度为 O(n))。

    # 4. 内存管理

    • std::vector:

      • 当容量不足时,会重新分配更大的内存块并复制元素,可能导致性能下降。
    • std::deque:

      • 不需要连续的内存块,插入和删除时更灵活,减少了重新分配的需要。
    • std::list:

      • 每个元素都有额外的指针开销,内存使用效率较低。

    # 5. 使用场景

    • std::vector:

      • 适合需要频繁随机访问和在末尾插入的场景,如动态数组、栈等。
    • std::deque:

      • 适合需要在两端频繁插入和删除的场景,如双端队列、缓冲区等。
    • std::list:

      • 适合需要频繁插入和删除的场景,尤其是在中间位置,如实现队列、栈等。

    # 总结

    选择 std::vector、std::deque 还是 std::list 主要取决于具体的使用场景和性能需求。std::vector 适合随机访问和末尾插入,std::deque 适合两端操作,而 std::list 则适合频繁的插入和删除操作。

    编辑 (opens new window)
    上次更新: 2024/09/13, 11:59:12
    map和unorder_map
    内置数据结构

    ← map和unorder_map 内置数据结构→

    最近更新
    01
    ceph分布式存储-对象存储(RGW)搭建
    10-27
    02
    ceph分布式存储-集群客户端连接
    10-27
    03
    ceph分布式存储-管理crushmap
    10-27
    更多文章>
    Theme by Vdoing
    • 跟随系统
    • 浅色模式
    • 深色模式
    • 阅读模式