从我所做的研究来看,deque似乎是作为链表或圆形数组实现的。这两种实现在性能方面有什么不同?为什么要选择其中一种实现而不是另一种实现?
std::deque
既不能作为一个简单的数组实现,也不能作为一个链表实现。它被实现为指向固定大小数组的指针向量。
一般来说,双端队列——如果不受std::deque
要求的负担——确实可以使用数组或链表来实现。
两者在性能方面的差异是什么
数组具有更好的缓存局部性。对于insert,列表具有更好的最坏情况复杂度。
为什么要选择一种实现而不是另一种?
一个可以比另一个更快,这取决于用例。在大多数情况下,数组更快。
在元素引用的无效方面也存在差异。与所有基于节点的数据结构一样,在删除元素之前,对链表元素的引用仍然有效。在insert或remove操作中,对所有数组元素的引用通常都是无效的,除非有特定的条件。