STL

容器:

序列式容器:

  • array: C++ 内建
  • vector: 动态连续空间,迭代器为普通指针
    • heap: 用array存储
      • priority-queue: 利用max-heap完成
  • list: 双向环形链表存储,只要一个指针,便可表示整个环状双向链表。
  • slist: 单项链表(single linked list)。和list的主要差别在于slist的迭代器属于单向的Forward Iterator,list的迭代器属于双向的Bidirectional Iterator。
  • deque: vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。
    • stack: 可以deque为底部结构并封闭其头端开口,形成stack。也可以list为底部结构形成stack。因此STL stack往往不被归类为container,而被归类为container adapter。
    • queue: 以deque为底部结构并封闭其底端的出口和前端的入口,形成queue。因此STL queue往往不被归类为container,而被归类为container adapter。

deque

与vector相比,deque允许常数时间内对起头端进行元素的插入或移除操作,且没有所谓容量(capacity)观念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的空间并链接起来。像vector那样“因旧空间不足而重新配置一块更大空间,然后复制元素,再释放旧空间”这样的事情在deque是不会发生的。也因此,deque没有必要提供所谓的空间保留(reserve)功能。

虽然deque也提供Random Access Iterator,但它不是普通指针,比vector要复杂许多。这影响了各个运算层面。因此,除非必要,我们应尽可能选择使用vector而非deque。对deque进行的排序操作,为了最高效率,可以将deque先复制到一个vector身上,将vector排序后(利用STL sort算法),再复制回deque。

deque系由一段一段的定量连续空间构成。一旦有必要在deque的前端或尾端增加新空间,便配置一段定量连续空间,串接在整个deque的头端或尾端。deque的最大任务,便是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取的接口。避开了“重新配置、复制、释放”的轮回,代价则是复杂的迭代器架构。

关联式容器

  • RB-tree
    • set
    • map
    • multiset
    • multiset
  • hashtable
    • hash_set
    • hash_map
    • hash_multiset
    • hash_multimap
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值