【发布时间】:2014-11-29 12:17:13
【问题描述】:
我希望实现一个具有以下属性的 c++ 容器对象:
- 将所有元素连续保存在内存中,以便可以对其进行迭代而不会导致任何缓存未命中。
- 可扩展,不像固定大小的数组,但很像 stl 中的向量,它可以调整分配的内存以容纳我添加的尽可能多的元素。
- 在调整大小时不会将元素重新分配到内存中的新位置,就像在 std 向量的情况下一样。我需要保留指向容器中元素的指针,因此在添加新元素时重新分配指针不应失效。
- 必须与基于范围的 for 循环兼容,以便可以有效地迭代内容。
在任何外部库中是否有满足这些要求的容器,或者在这种情况下我必须实现自己的容器吗?
正如一些 cmets 所指出的,并非所有所需的属性都可以一起实现。我应该解决这个问题,并且我有一个实施方案。由于使事物完全连续是不可能的,因此可以适应一些不连续性。例如,数据容器最初为 10 个元素分配空间,当达到上限时,分配另一块内存,是前一个块的两倍,但不会将现有元素复制到该新块。相反,它用我放入其中的新元素填充新块。这样可以最大限度地减少不连续性。
那么,有没有已经实现的数据结构?
【问题讨论】:
-
#1 和 #3 是不兼容的要求。
-
难道你不知道#1+#2 与#3 直接矛盾吗?如果某些东西是可扩展的,则没有办法在不重新分配的情况下“扩展”它,除非您允许其内存不连续,或者预先分配最大大小。
-
你最后的想法是
std::forward_list<std::array<T, N>>。 -
@TheParamagneticCroissant 你能教我如何使用它吗?我有点糊涂了??????
标签: c++ containers data-containers