为什么stack和queue默认使用deque作为底层容器?

在C++中,stackqueue默认使用deque作为底层容器的原因主要有以下几点:

  1. 操作效率deque(双端队列)支持在头尾两端进行插入和删除操作,且时间复杂度都为O(1),非常高效1。而vector在增长到一定长度时为了保证完全连续,需要重新申请更长的内存,并把原来的元素全部拷贝过去2。这使得vector的尾部插入操作在某些情况下的时间复杂度会变为O(n),效率较低2

  2. 空间利用率deque并不是真正连续的一段空间,而是由一段段连续的小空间拼接而成1。这使得deque在空间利用率上相比于list、vector有优势1

  3. 适应性deque的特性使其更能贴合stackqueue的需求1stack为先进后出结构,所有具有push_backpop_back的容器都可以作为底层默认容器1queue为先进先出结构,所有具有push_backpop_front的容器都可以作为底层默认容器1deque恰好满足这两种操作的需求1

  4. 灵活性:虽然dequestackqueue的默认底层容器,但C++标准库允许用户根据自己的需求选择其他容器作为底层容器2。例如,如果能预分配足够的容量,使用vector作为stack的底层容器可能会更优2

总的来说,deque作为stackqueue的默认底层容器,是因为它在操作效率、空间利用率和适应性等方面的综合考虑结果12

 

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-04 16:12:38       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-04 16:12:38       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-04 16:12:38       82 阅读
  4. Python语言-面向对象

    2023-12-04 16:12:38       91 阅读

热门阅读

  1. sx

    sx

    2023-12-04 16:12:38      53 阅读
  2. CF1902 B Getting Points 题解

    2023-12-04 16:12:38       69 阅读
  3. .NET CORE架构分层

    2023-12-04 16:12:38       46 阅读
  4. Arkts build函数

    2023-12-04 16:12:38       53 阅读
  5. 浏览器中打开exe

    2023-12-04 16:12:38       56 阅读
  6. 前后端跨域问题

    2023-12-04 16:12:38       54 阅读
  7. c语言实现this指针效果

    2023-12-04 16:12:38       44 阅读
  8. [编程] 你真的会写函数注释?这里给你一个答案

    2023-12-04 16:12:38       47 阅读
  9. 上周热点回顾(11.27-12.3)

    2023-12-04 16:12:38       52 阅读
  10. 带团队后的日常思考(十三)

    2023-12-04 16:12:38       56 阅读
  11. 在NET8中使用简化的 AddJwtBearer 认证

    2023-12-04 16:12:38       49 阅读