stl 序列容器

Posted billowj

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了stl 序列容器相关的知识,希望对你有一定的参考价值。

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 序列容器的主要内容,如果未能解决你的问题,请参考以下文章

cpp►STL容器->序列容器->list

反序列化没有默认构造函数的类型的 STL 容器

cpp►STL容器->序列容器->deque

cpp►STL容器->序列容器->vector

STL学习笔记--4序列式容器之vector

07--STL序列容器(Array)