c++ - 存储反转数据的 vector

标签 c++ vector containers

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

我想以相反的方式存储东西,在较高的 vector 索引(即较高的地址)处使用较低的协议(protocol)索引,以最大程度地减少内容移动,但仍然能够通过协议(protocol)索引透明地随机访问元素.理想的容器是 std::vector 的直接替代品,除了指针算术和类似的东西。我仍然想要指针运算,但我自己可以处理逆序。

周围有这样的类(class)吗?

也许是一些我找不到的 boost 容器或一些晦涩的政策?

编辑:实际上,令我感到震惊的是,我可以使用一种在索引0 之前和之后保留空间的 vector 长度-1。 Deque 并不像我想象的那样构建,它使用内存块来代替指针算法。

最佳答案

根据您的描述,听起来好像项目在 vector 的前面插入和删除,导致 vector 的其余部分移动。如果是这样,则意味着您不依赖于停留在特定索引处的项目。这就提出了一个问题,为什么插入和删除在 vector 的前面——以保持排序顺序?

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

当插入和删除非常本地化时,听起来像(但您不是很清楚),您可能可以使用游标间隙结构,也称为 gap buffer ,将插入和删除减少到恒定时间,保持恒定时间索引。一个成本是索引涉及额外的间接寻址。但这可能是不成熟的优化,因此如果性能很重要,请衡量

关于c++ - 存储反转数据的 vector ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14291827/

相关文章:

c++ - 一旦到达终点,返回到 Vector 的顶部 C++

c++ - 将包含 std::thread 的类添加到 vector 中

c++ - 问题 : 2d Vector (nested Vector) with datatype of new class

docker - 有没有办法全局设置/dev/shm 的大小,这样 --shm-size 标志不需要设置为 docker run 的一部分?

css - HTML+CSS |更改 `<div>` 内的背景位置 - 我该如何实现?

c++ - 如何在不使用++ 或 + 或其他算术运算符的情况下将两个数字相加

c# - OpenGL 可编程管道运行速度较慢?

c++ - 分支预测和分支目标预测之间的性能差异?

c++ - 如何使用函数区分名称之间的分数

python - 如何仅在Google Cloud Run的生产中运行某些代码行?