stl.list/stl.vector/stl.deque区别联系

双端队列(deque)是一种支持向两端高效地插入数据、支持随机访问的容器。

******************************************************************************************************

deque是双端连续性

vector 是单端连续性

list 顺序离散

******************************************************************************************************

deque封闭掉一端后,便是vector、qeque!!!

vector+list ->deque

*****************************************************************************************************

list与vector相比各有什么优缺点呢?

1.底层结构不一样,一个是数组连续型一个是离散型的依靠指针遍历操作

扫描二维码关注公众号,回复: 469846 查看本文章

2.vector插入删除只可在一端,list可随意

3.

vector适用:对象数量变化少,简单对象,随机访问元素频繁
list适用:对象数量变化大,对象复杂,插入和删除频繁
最大的区别是,list是双向的,而vector是单向的。
*******************************************************************************
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面
的原则:

1、如果你需要高效的随即存取,而不在乎插入和删除的效率,使用vector
2、如果你需要大量的插入和删除,而不关心随即存取,则应使用list   
3、如果你需要随即存取,而且关心两端数据的插入和删除,则应使用deque
****************************************************************************************************************
向两端加入新元素时,如果这一端的分段数组未满,则可以直接加入,如果这一端的分段数组已满,只需创建新的分段数组,并把该分段数组的地址加入到索引数组中即可。无论哪种情况都不需要对已有元素进行移动,因此在双端队列的两端加入新的元素都具有较高的效率。

***************************************************************************************************************
当删除双端队列容器两端的元素时,由于不需要发生元素的移动,效率也是非常高的。

双端队列中间插入元素时,需要将插入点到某一端之间的所有元素向容器的这一端移动,因此向中间插入元素的效率较低,而且往往插入位置越靠近中间,效率越低。删除队列中元素时,情况也类似,由于被删除元素到某一端之间的所有元素都要向中间移动,删除的位置越靠近中间,效率越低。


注意:
在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。

猜你喜欢

转载自blog.csdn.net/gease_lcj/article/details/79592242