STL序列容器

序列容器:逻辑上有序,但是实际上其地址不一定是连续的.

 

序列容器包括vector,list,deque,queue,priority_queue,stack.

我们下面对每一个容器进行分析.

 

vector容器

大家对vector一定非常熟悉了.当内存不足时候,会对vector进行扩容,扩容的方式是先申请一个更大的空间,然后把原来的数据复制到新的空间上,释放原先的空间.


vector的思想就是这么简单.

       但是这回造成什么呢?迭代器失效:在删除一个元素后,begin不会失效,删除元素的迭代器和end迭代器都会失效.

 

list容器:

一个双向循环链表.


       这里可以清楚的看出,list是一个双向链表.他的查找效果比单向链表更好.这里要特别讲一下node节点,他是用于标记尾节点的指针.

 

deque容器


这个图看起来很乱,其实一点也不复杂.

 map:用于管理存储区,每当内存不够的时候,就向前扩充一个空间,或者向后扩充,map用完以后,会再次申请把一个大内存,复制map中的数据,然后销毁旧的map.数据存储区域并不动.

start,finish:这里面还有两个迭代器,deque中的数据,他们分别指向deque首部和尾部.

deque中迭代器失效:收尾添加数据仅能是当前迭代器(自己定义的迭代器)失效,需要重新复制,deque是不应该向中间添加数据的,如果强制向中间部分添加数据会造成所有迭代器同时失效.deque是可以存储引用值的,因为数据存储区不会进行拷贝.

 

map,他并不是容器,他是pritority_queue的底层实现.和上面那个图中的那个map毫不相关.

pritority_queue底层实现是使用map,即一个用vector实现的完全二叉堆.


       每当新插入一个数据就会在后面添加一个数据,然后保持堆的性质,返回优先级最高的数据.该类型默认是比较<,一般使用该数据都要重载一个<操作符.

       他并没有实现迭代器,所以不存在迭代器失效问题.

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

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值