码迷,mamicode.com
首页 > 其他好文 > 详细

stl 序列容器

时间:2020-04-28 20:11:55      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:功能   stack   删除元素   deque   remove   等等   时间   删除   操作   

vector:

  数据结构:线性连续空间

  特点:动态扩容机制,及其能支持随机访问的迭代器。通过判断finish是否等于end_of_storage 来判断备用空间是否充足,进而决定是否进行扩容。所谓动态扩容,不是在原空间之后扩容,而是以原空间两倍另外配置空间,然后将原内容拷贝过去,并释放原空间。也是因为这样,所以原先空间的迭代器就会全部失效。并且这样扩容效率很低,每次都要进行拷贝。

  函数:pop_back erase clear insert push_back...

 

list:

  数据结构:环形双向链表

  特点:每次插入或删除元素就会配置或释放一个元素空间,所以list节省空间,插入删除永远是常数时间。因为这种空间分配机制,所以每次操作list的元素都不会造成迭代器失效,除非是你操作的那个元素。

其迭代器的内部有一个指向list节点的指针。因为list为环形双向链表,固只需一个指针便可遍历全部元素。并且,如果在尾端设置一个空白节点,便可以当作单链表使用(前闭后开)。对于list来说,头尾插入的效率高。

  函数:push_front push_back remove insert unique pop_front pop_back sort reverse splice

 

deque:

  数据结构:双向连续线性空间.(存的时缓存区的指针)

  特点: 区别于vector,deque没有容量大小,随时可以增加新的空间结合起来,并且时双向扩容,没有空间保留功能。但是因为这样的结构设计导致迭代器的实现很复杂。其缓冲区的迭代器有四个,指向头,尾,当前位置,和node。如果要进行迭代器的访问,要考虑到迭代器是否处于当前缓冲区的边界,涉及到跳跃缓存区的问题。这里还涉及到空间分配的很多细节,都在书里,就不细说。对于deque的迭代器移动很多重要的实现,比如判断当前位置前端后端的个数,选择方向进行移动,或析构等等...

  函数:pop_back pop_front clear insert erase...

 

stack:

  数据结构:deque ;  stack是adapter

  特点:无迭代器,不支持随机访问,

queue:

  数据结构 list; adapter

  特点:无迭代器,不支持随机访问。

stl 序列容器

标签:功能   stack   删除元素   deque   remove   等等   时间   删除   操作   

原文地址:https://www.cnblogs.com/BillowJ/p/12796827.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!