stl源码剖析带目录_侯捷《STL源码剖析》 | 容器的结构和分类

252f3290ed1b29fd2023ab1b4c3d2d9f.png

容器的分类

STL中一个比较宽泛的容器分类及其之间的关系如下图所示:

b0b088796e3f2dcc72874c5e1bd65e31.png

序列式容器(sequence container)

180201d6d9edae4cfcc46fc47b664acc.png

序列化容器包括以下几种:

  • array(数组)
  • vector(向量)
  • deque(双端队列)
  • List(双向链表)
  • forward list(单向链表)
stack、queue底层可以调用deque实现。

ee94327013e54b02d112a7876cd65f6b.png

7c5f7426268a9e3dea5140e3c13c526b.png

d9404d7e7d02d60dc43bd6f9e1790abe.png

关联式容器(associative container)

032449180bb29370b6a373559c75837f.png

关联式容器主要指以下两种:

  • set / Multiset
  • map / Multimap

set、map基于红黑树(RBtree)的实现。
set中元素不能重复,Multiset中可以存储重复元素。
map中key不能重复,Multimap中可以重复。

Multimap中键值key与元素value的映照关系是多对多的关系,因此没有定义[]操作运算,而应使用c.insert()操作。

23230fedec6f398ae9bd842f82b24deb.png

散列式容器(unordered container)

  • unordered set / Multiset
  • unordered map / Multimap

基于散列表(hash table)的实现。hash table散列之后,若出现冲突,一般使用链表串联起来。
hash table中每块用来散射的区域叫做bucket(篮子)。bucket中可以承载多个物体。

HashTable实际实现时,单个bucket中物体的数量不能超过bucket的数量,否则,扩充bucket。

3dd9bda517067a091ec799770f206e94.png

reference

  • 侯捷《STL源码剖析》

更多精彩文章,欢迎关注公众号“Li的白日呓语”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值