向量具有良好的缓存效率(具有紧密索引的元素在内存中靠近放置),但对于任意位置的插入效率低。列表在任意位置插入O(1)
(只要您知道该位置的地址),但它们具有可怕的缓存效率(元素在堆中随机分布)。
是否有任何数据结构在任何索引中插入O(1)
,以保持内存附近位置附近索引的元素?
答案 0 :(得分:2)
在附近放置列表元素通常不是结构(矢量,列表)作业,而是分配器作业
元素在堆中随机分布
对于不在堆中随机分布的元素,必须使用池或固定大小的块分配
答案 1 :(得分:1)
您不能同时具有最坏情况的O(1)随机访问插入以及具有相似索引的元素的并置。如果具有相似索引的元素必须位于彼此的O(1)个单位内,那么您始终可以在相同位置插入足够的元素,以便下一个插入强制O(n)个其他元素的移动。实际上,为了强制至少一些移动而需要插入的元素数量是O(1)(因为近元素之间的间距也是如此)。
答案 2 :(得分:0)
查看std :: deque。它混合了矢量和列表的属性。我相信它像列表一样实现,但不是每个分配有一个节点,而是分配固定数量的节点。