有没有像我要求的容器?

时间:2014-11-29 12:17:14

标签: c++ containers data-containers

我正在寻找实现具有以下属性的c ++容器对象:

  1. 将所有元素连续保存在内存中,以便可以迭代它而不会导致任何缓存未命中。
  2. 可扩展,不像是固定大小的数组,但很像stl中的向量,它可以调整分配的内存以容纳与我添加的元素一样多的元素。
  3. 在调整大小时,不会像std向量一样将元素重新分配到内存中的新位置。我需要保持指向容器中元素的指针,因此在添加新元素时不应该重新分配指针。
  4. 必须与基于范围的for循环兼容,以便可以有效地迭代内容。
  5. 在任何外部库中是否有满足这些要求的容器,或者在这种情况下我是否必须实现自己的容器?

    正如一些评论所指出的,并非所有期望的属性都可以一起实现。我应该考虑到这一点,并且我有一个实现。由于不可能完全连续,所以可以容纳一些不连续性。例如,数据容器最初为10个元素分配空间,当达到上限时,将另一块内存分配为前一个块的两倍,但不会将现有元素复制到该新块。相反,它用我放入的新元素填充新块。这可以最大限度地减少不连续的数量。

    那么,是否有一个已经实现的数据结构?

1 个答案:

答案 0 :(得分:3)

恕我直言,最接近您需要的数据结构是 STL中的deque。基本上它存储了一大堆连续的记忆和 提供随机访问迭代器和push_back的稳定性问题 (尽管迭代器无效,但您的元素仍保持在同一位置)。 约束的唯一问题是内存不连续 无处不在但正如其他人评论的那样,如果您愿意,您的需求是不兼容的 完全满足他们所有人。 顺便说一下,这个容器的一个好东西就是你也可以继续推进 前面。