STL序列式容器概述

STL容器分为序列式和关联式两种,序列式容器,其中的元素都可序,但未必有序
这里写图片描述
(heap内含一个vector,priority-queue内含一个heap,stack和queue都内含一个deque)

1.以vector为底层实现
1.1 vector vector详情
- vector维护的是一个连续线性空间,支持随机存取
- 在空间配置时,vector实际配置的大小可能比客户端需求量更大一些,以备将来可能的扩充
- vector动态增加大小,并不是在原空间之后接续新空间(因为无法保证原空间之后尚有可供配置的空间),而是以原大小的两倍另外配置一块较大空间,然后将原内容拷贝过来,才开始在内容之后构造新元素,并释放原空间

1.2 heap
内含一个vector,不提供遍历功能,也不提供迭代器

相关知识:

  • binary heap:一种complete binary tree(完全二叉树),除了最底层的叶节点之外,都是填满的,最底层的叶节点由左至右不得有空隙
  • 根据元素排列方式分为:
    • max-heap:每个节点的键值(key)都大于或等于其叶子节点键值(key)。最大值在其根节点,并总是位于底层vector或array的起头处
    • min-heap:每个节点的键值(key)都小于或等于其叶子节点的键值(key)。最小值总是在其根节点,并位于的层vector或array的起头处

相关算法:

  • push-heap算法
  • pop-heap算法
  • sort-heap算法
  • make-heap算法

1.3 priority_queue

  • 是一个拥有权值观念的queue
  • 在缺省情况下利用max-heap完成
  • 不提供遍历功能,不提供迭代器

2.以list为底层实现
2.1 list

  • 每次插入或删除一个元素就配置或释放一个元素空间,对于任何位置的元素插入或元素删除,list永远是常数时间
  • 不保证在储存空间中连续存在
  • SGI list是一个环状双向链表

3.以slist为底层实现
3.1 slist

  • 单向链表
  • 迭代器属於单向的Forward Iterator
  • 插入、删除和接合等操作不会造成原有的迭代器失效
  • 插入操作会将新元素插入于指定位置之前

4.以deque为底层实现
4.1 deque

  • 是由一段一段的定量连续空间构成
  • 一旦有必要在deque的前端或尾端增加新空间,便配置一段定量连续空间,串接在整个deque的头端或尾端
  • 采用一块所谓的map(一小块连续空间)作为主控。其中每个元素都是指针,指向另一段(较大的)连续线性空间(缓冲区)

4.2 stack

  • 先进后出
  • 只有一个出口
  • SGI STL的stack在缺省情况下以deque作为底部结构
  • 不提供走访功能,不提供迭代器

4.3 queue

  • 先进先出
  • 有两个出口
  • 不允许有遍历行为
  • SGI STL的queue在缺省情况下以deque作为底部结构
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章