-2

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

  1. 将所有元素连续保存在内存中,以便可以对其进行迭代而不会导致任何缓存未命中。
  2. 可扩展,不像固定大小的数组,但很像 stl 中的向量,它可以调整分配的内存以容纳我添加的尽可能多的元素。
  3. 在调整大小时不会将元素重新分配到内存中的新位置,就像在 std 向量的情况下一样。我需要保留指向容器中元素的指针,因此在添加新元素时重新分配指针不应失效。
  4. 必须与基于范围的 for 循环兼容,以便可以有效地迭代内容。

在任何外部库中是否有满足这些要求的容器,或者在这种情况下我是否必须实现自己的容器?

正如一些评论指出的那样,并非所有所需的属性都可以一起实现。我应该解决这个问题,并且我有一个实施方案。由于使事物完全连续是不可能的,因此可以适应一些不连续性。例如,数据容器最初为 10 个元素分配空间,当达到上限时,分配另一块内存,是前一个块的两倍,但不会将现有元素复制到该新块。相反,它用我放入其中的新元素填充新块。这最大限度地减少了不连续性。

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

4

1 回答 1

3

恕我直言,最接近您需要的数据结构是 STL 中的 双端队列。基本上,它存储大量连续内存并提供随机访问迭代器和关于 push_back 的稳定性(尽管迭代器无效,但您的元素保持在同一位置)。您的约束的唯一问题是内存并非 到处都是连续的,但正如其他人评论的那样,如果您想完全满足所有需求,您的需求集是不兼容的。顺便说一句,这个容器的一个好处是你也可以推到前面。

于 2014-11-29T12:47:01.467 回答