deque底层原理及其相关面试题
(1)deque的底层原理
deque是一个双向开口的连续线性空间(双端队列),在头尾两端进行元素的插入跟删除操作都有理想的时间复杂度。
(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是想要添加的缓冲区的数量
这两种说法哪种对呢