有没有像我要求的容器

Is there a container like the one I am asking for?

本文关键字:我要 有没有      更新时间:2023-10-16

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

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

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

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

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

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

相关文章: