STL各容器底层数据结构总结

5 篇文章 1 订阅

看了《STL源码剖析》,对于里面的容器,下面进行了简单的总结。

1. vector:

     底层使用数组保存。push_back时若已经满了,则会2*n扩展空间,若实际元素数量低于分配空间的1/4,则会将空间回收为原来的一半。《STL源码剖析》里面没有讲到空间的回收,是之前查找资料时看到。调整空间时,是先申请新的空间,然后将旧空间的内容拷贝过去,然后再释放旧的空间。

     只适用于快速查找及只在末尾增删,而不适用于动态增删(可能涉及到元素的移动)。对元素进行增删时,可能导致旧的迭代器失效。

2. list:

     底层是双向链表,支持头尾增删,并且是一个环。

     不适用于查找频繁的情况,但适用于动态增删。

3. deque:

     底层是一个分段的线性表。笼统的说就是使用了一个二维指针,第一维是每段的信息,而第二维就是一个数组了,实际保存的元素就是在这里。

      头尾都支持插入,但是维护麻烦很多。

4. stack

      是一个容器适配器,默认底层使用deque,适配之后只能从头插入和删除。

5. queue

      是一个容器适配器,默认底层使用deque,适配之后只能从尾插入,从头删除。

6. slist

     使用单向链表实现的列表。

6. map、multimap、set

      底层使用红黑树实现,multimap是key值可重复的map。

7. hash_map、hash_set

      底层使用hashtable实现,其中hashtable是采用开链法来防止哈希冲突的。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值