有没有像我要求的容器
Is there a container like the one I am asking for?
我正在寻找实现具有以下属性的c ++容器对象:
- 将所有
- 元素连续保存在内存中,以便可以对其进行迭代而不会导致任何缓存未命中。
- 可扩展,不像固定大小的数组,但很像 stl 中的向量,它可以调整分配的内存以容纳我添加的任意数量的元素。
- 调整大小时不会像 std 向量那样将元素重新分配到内存中的新位置。我需要保留指向容器中元素的指针,因此在添加新元素时,重新分配指针不应失效。
- 必须与基于范围 for 循环兼容,以便可以有效地循环访问内容。
在任何外部库中是否有任何满足这些要求的容器,或者在这种情况下我必须实现自己的容器?
正如一些评论所指出的,并非所有所需的属性都可以一起实现。我应该克服这一点,我心中有一个实施。由于不可能使事物完全连续,因此可以容纳一些不连续性。例如,数据容器最初为 10 个元素分配空间,当达到上限时,会分配另一个内存块,其数量是前一个块的两倍,但不会将现有元素复制到该新块。相反,它用我放入其中的新元素填充新块。这最大限度地减少了不连续性。
那么,是否有已经实现它的数据结构?
恕
我直言,最接近您需求的数据结构是在STL中。基本上,它存储了大量连续的记忆和提供随机访问迭代器和push_back稳定性(尽管迭代器失效,但您的元素仍保留在同一位置(。约束的唯一问题是内存不是连续的无处不在,但正如其他人评论的那样,如果你愿意,你的需求是不相容的以完全满足所有人。顺便说一下,这个容器的一件甜蜜的事情是你也可以继续前进前面。
相关文章:
- 我知道函数调用中存在歧义.有没有办法调用foo()函数
- 有没有办法让编译器在我放置字符串而不是 nlohmann::json 对象时抛出错误?
- 为什么这段代码给我错误? 有没有自错?
- 有没有办法让我编写一个可以在Windows和Linux上运行的命令行游戏?
- 有没有办法我可以在 C++ 中使用 if 语句来说明如果一个字符串不是两个名称的 eqal,它会给出一个输出,ATM i
- 有没有办法根据 lambda 参数返回类型部分专用化我的模板化函数?
- 有没有更好的方法可以让我接收这些输入?C++
- 在C++中,有没有一种方法可以让我在不传递参数的情况下拥有一个函数
- 我是 c++ 的新手,有没有一种算法可以找到 3d 数组中最接近的 0 的距离?
- 有没有办法用单行逻辑代码打印金字塔星形图案?面试官向我的朋友问了这个问题
- 我最近正在阅读opencv源代码。有没有更好的方法来在opencv库中查找类定义?
- 重新定义要在函数中使用的静态变量 - 有没有更好的方法?
- 有没有办法我可以从 istringstream 中读取两个字符
- 我想使用 CMake 生成和编译 Visual Studio projet,我需要从构建中排除单元测试文件。有没有办法做到这一点?
- 有没有办法让这些变量从真切换到假,还是我做错了
- 有没有办法在我的通用功能路由器设计中支持"常量引用"作为功能签名参数?
- 为什么我要获得不同的输出?我使用有界的缓冲区,pthreads和Semaphores对C 进行编码
- 有没有办法在整个项目中包含和链接外部库,只编辑我的顶级 CMakeList
- 有没有修复我的代码没有将 int 声明为我在 if else 循环中选择的内容
- 有没有办法在不使用GDI+的情况下从我的资源加载.png