存储反转数据的向量

时间:2013-01-12 08:57:10

标签: c++ vector containers

我使用的协议通过索引引用列表中的内容。存储这些东西的自然方式是在向量中,所以我可以在恒定的时间内随机访问。但从本质上讲,矢量开头有很多摆弄,包括插入和删除。指数越低,摆弄越多。 结果是大量复制了矢量的其余部分。

我想以相反的方式存储事物,在较高的矢量索引(即更高的地址)处降低协议索引,以最小化内容移位,但仍然能够通过协议索引透明地随机访问元素。理想的容器将是std :: vector的替代品,除了指针算术和类似物。我仍然想要指针算术,但我可以自己处理逆序。

周围有这样的课吗?

也许我找不到一些提升容器或一些不起眼的政策?

编辑:实际上,我可以使用一种在索引0之前以及索引{{1}之后保留空间的向量}}。 Deque不像我想象的那样构建,它使用了大块的内存来阻止指针算术。

1 个答案:

答案 0 :(得分:1)

从您的描述中,听起来好像在向量的前面插入和删除了项目,导致向量的其余部分被移位。如果是这样意味着您不依赖于停留在特定指数的项目。这引出了为什么插入和删除位于向量前面的问题 - 维持排序顺序?

C ++标准库中有许多容器维护一个带有对数时间插入和删除的排序顺序,例如: std::multi_set

当插入和删除非常本地化时,听起来像是(但你不是很清楚),你可以使用游标间隙结构,也称为 { {3}} ,将插入和删除减少到恒定时间,保持恒定的时间索引。一个成本是索引涉及额外的间接。但这可能是过早的优化,所以 MEASURE 如果性能很重要。