C++标准模板库(STL)中的双端队列
双端队列是序列容器,两端都有扩展和收缩功能。
它们与载体相似,但是在插入和删除元素的情况下效率更高。与向量不同,可能无法保证连续的存储分配。
双端队列基本上是数据结构双端队列的一种实现。队列数据结构仅允许在末尾插入而从前部删除。这就像现实生活中的队列,其中人们从前面移开并在后面增加。双端队列是队列的一种特殊情况,在两端都可以进行插入和删除操作。
双端队列的功能与矢量相同,只是在正面和背面都增加了推入和弹出操作。
C++ STL中的向量
向量与动态数组相同,具有在插入或删除元素时自动调整自身大小的能力,并且容器自动处理其存储。向量元素放置在连续的存储中,以便可以使用迭代器对其进行访问和遍历。在向量中,数据将插入到末尾。在末尾插入会花费不同的时间,因为有时可能需要扩展阵列。删除最后一个元素只需要固定的时间,因为不会发生大小调整。在开始或中间插入和擦除的时间是线性的。
双端队列和向量之间的区别:
Vector | Deque |
---|---|
Provides insertion and deletion methods at middle and end | Provides insertion and deletion methods at middle, end, beginning |
Bad performance for insertion and deletion at the front | Good performance for insertion and deletion at the front |
Stores elements contiguosly | It contains lists of memory chunks where elements are stored contiguosly |
Good performance for addition and deletion of elements at the end | Poor performance for addition and deletion of elements at the end |
什么时候我们应该选择Deque而不是Vector?
当我们的操作在开头和结尾添加和删除元素时(双端队列ADT),我们必须选择Deque。
要从最佳影片策划和实践问题去学习,检查了C++基础课程为基础,以先进的C++和C++ STL课程基础加上STL。要完成从学习语言到DS Algo等的更多准备工作,请参阅“完整面试准备课程” 。