deque底层原理及其相关面试题

(1)deque的底层原理

deque是一个双向开口的连续线性空间(双端队列),在头尾两端进行元素的插入跟删除操作都有理想的时间复杂度。

img

(2)什么情况下用vector,什么情况下用list,什么情况下用deque

vector可以随机存储元素(即可以通过公式直接计算出元素地址,而不需要挨个查找),但在非尾部插入删除数据时,效率很低,适合对象简单,对象数量变化不大,随机访问频繁。除非必要,我们尽可能选择使用vector而非deque,因为deque的迭代器比vector迭代器复杂很多。

list不支持随机存储,适用于对象大,对象数量变化频繁,插入和删除频繁,比如写多读少的场景。

需要从首尾两端进行插入或删除操作的时候需要选择deque。

(3)deque的常用函数
deque.push_back(elem)   在尾部加入一个数据。
deque.pop_back()        删除尾部数据。
deque.push_front(elem)  在头部插入一个数据。
deque.pop_front()       删除头部数据。
deque.size()            返回容器中实际数据的个数。
deque.at(idx)           传回索引idx所指的数据,如果idx越界,抛出out_of_range。

发表评论

后才能评论

评论(1)

  • deque底层控制中心那个所谓的map,他扩容方式是怎样的?侯捷老师视频18集12分钟说其控制中心就是个vector,是2倍扩容。但是STL源码剖析P161页写的:新map的大小为:size_type new_map_size = map_size + max(map_size, nodes_to_add) + 2;其中nodes_to_add是想要添加的缓冲区的数量
    这两种说法哪种对呢