据我了解,deque背后的动机是提供一个具有高效push_front
的随机访问容器。
与deque相比,vector常见的优点包括更快的遍历和at()
,但主要是它的C兼容性,因为它保证了连续的内存。 Deque没有,因为它是一堆内存,每个都有很多值。
我很困惑。除了在索引0
之后保留的内存之外,为什么deque不是像向量一样构建,而是在索引size-1
之前保留内存?这将保证连续内存,启用高效push_front
,甚至在解除引用迭代器时避免额外的间接。
为了在插入期间最小化移位,要移位的包含值将取决于插入点。如果在n
之前插入索引size()/2
,请将值向左移动n
。否则在n
之后向右移动值。
我想念的是什么,以至于deque是一组价值数组而不是一个大数组呢?
答案 0 :(得分:8)
According to Wikipedia,你所描述的确实是一种可能的实现,至少在一般情况下是这样。
但是,C ++标准强制要求基本上禁止将其作为std::deque
的实现; [deque.modifiers]声明:
在双端队列的两端插入......对双端队列元素的引用的有效性没有影响。
(感谢@BenjaminLindley!)