有没有办法在向量常量时间中插入一些东西

时间:2015-12-13 03:08:26

标签: c++ vector

我想将元素i插入std::vector someVector但不想使用.insert(),因为它是O(n)复杂度,因为(据我所知)它推回所有其他元素。

无论如何在恒定时间内这样做,类似于用于擦除的交换/调整大小技巧?

1 个答案:

答案 0 :(得分:5)

是的,如果您可以接受对插入或删除位置的顺序访问的限制。

基本思想被称为游标间隙(因为它用于早期文本编辑器)或更常见的间隙缓冲区结构。有一个Wikipedia article about it。但简而言之,您只需保留所有未使用项目的序列或“间隙”,其中您具有插入/删除位置,并且移动插入/删除位置一步对应于将实际项目从一侧复制到另一侧。间隙。

具有连续索引范围的索引仍然是恒定时间,中间有一个间隙(您只需要正确定义它),但是为了然后直接使用向量的缓冲区作为连续数组,差距必须移到一边,这是线性时间操作。

相关问题