您的位置:首页 > 产品设计 > UI/UE

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

2018-03-17 15:08 274 查看
双端队列(deque)是一种支持向两端高效地插入数据、支持随机访问的容器。
******************************************************************************************************
deque是双端连续性
vector 是单端连续性
list 顺序离散
******************************************************************************************************
deque封闭掉一端后,便是vector、qeque!!!
vector+list ->deque
*****************************************************************************************************
list与vector相比各有什么优缺点呢?
1.底层结构不一样,一个是数组连续型一个是离散型的依靠指针遍历操作
2.vector插入删除只可在一端,list可随意
3.vector适用:对象数量变化少,简单对象,随机访问元素频繁
list适用:对象数量变化大,对象复杂,插入和删除频繁
最大的区别是,list是双向的,而vector是单向的。
*******************************************************************************
因此在实际使用时,如何选择这三个容器中哪一个,应根据你的需要而定,一般应遵循下面
的原则:

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

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

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

注意:
在除了首尾两端的其他地方插入和删除元素,都将会导致指向deque元素的任何pointers、references、iterators失效。不过,deque的内存重分配优于vector。因为其内部结构显示不需要复制所有元素。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: