deque循环数组与列表实现的区别



从我所做的研究来看,deque似乎是作为链表或圆形数组实现的。这两种实现在性能方面有什么不同?为什么要选择其中一种实现而不是另一种实现?

std::deque既不能作为一个简单的数组实现,也不能作为一个链表实现。它被实现为指向固定大小数组的指针向量。

一般来说,双端队列——如果不受std::deque要求的负担——确实可以使用数组或链表来实现。

两者在性能方面的差异是什么

数组具有更好的缓存局部性。对于insert,列表具有更好的最坏情况复杂度。

为什么要选择一种实现而不是另一种?

一个可以比另一个更快,这取决于用例。在大多数情况下,数组更快。

在元素引用的无效方面也存在差异。与所有基于节点的数据结构一样,在删除元素之前,对链表元素的引用仍然有效。在insert或remove操作中,对所有数组元素的引用通常都是无效的,除非有特定的条件。

最新更新