Performance 是否有任何类似列表的结构允许在任意索引处插入,同时保持缓存效率?

Performance 是否有任何类似列表的结构允许在任意索引处插入,同时保持缓存效率?,performance,data-structures,Performance,Data Structures,向量有很好的缓存效率(索引相近的元素在内存中放得很近),但在任意位置插入时效率很低。列表在任意位置插入O(1)(只要知道该位置的地址),但它们的缓存效率很差(元素在堆中随机分布) 在任何索引中是否有插入了O(1)的数据结构,以使具有近索引的元素保持在内存中的近位置?查看std::deque。它混合了向量和列表的属性。我相信它的实现方式类似于列表,但不是每次分配一个节点,而是分配固定数量的节点。将列表元素放在附近通常不是一个结构(向量、列表)作业,而是一个分配器作业 元素在堆中随机分布 对于不在堆

向量有很好的缓存效率(索引相近的元素在内存中放得很近),但在任意位置插入时效率很低。列表在任意位置插入
O(1)
(只要知道该位置的地址),但它们的缓存效率很差(元素在堆中随机分布)


在任何索引中是否有插入了
O(1)
的数据结构,以使具有近索引的元素保持在内存中的近位置?

查看std::deque。它混合了向量和列表的属性。我相信它的实现方式类似于列表,但不是每次分配一个节点,而是分配固定数量的节点。

将列表元素放在附近通常不是一个结构(向量、列表)作业,而是一个分配器作业

元素在堆中随机分布


对于不在堆中随机分布的元素,必须使用池或固定大小的块分配

最坏情况下不能同时进行O(1)随机访问插入和具有类似索引的元素的配置。如果具有相似索引的图元必须彼此位于O(1)个单位内,则可以始终在同一位置插入足够的图元,以便下次插入时强制O(n)个其他图元移动。事实上,您需要插入的元素数为O(1)(因为相邻元素之间的间距也是如此)。

但出列只允许在末端插入,而不允许在任意索引处插入。这是不正确的。它允许随机访问和插入。它在末端有“快速”插入。可能有允许随机访问的出列实现,但由于它们这样做,它们不是作为出列操作。在末端插入和删除是出列的定义属性。也许您指的是称为出列的通用数据结构?我指的是特定的STD::DEC++是C++标准库的一部分:事实上,在被标记问题[数据结构]和[C]([C++]标签]的上下文中,我还指什么叫“DEQueGead”的标准数据结构?如果你的意思是
std::dequeue
,那么你应该编辑你的答案,这样说,因为它不能从上下文中推断。
vector
一点效率也没有。列表的
O(1)
比向量的
O(1)
大得多。它只是说一个操作的价格是一张账单,但没有说每个账单是1美元还是50美元。你应该仔细阅读一下:你似乎把数据结构理论中的概念与特定实现的属性混为一谈。如果您想知道C++ C++的具体内容,那么删除[C]和[DealStase]标签并添加[STL]。“我并不特别关心这些,”维克利布,谢谢你的澄清。所以我猜“vector”是指我经常看到的名称拼写为“array”的东西,而“list”是指“linked list”。对