c++ 已经广泛建立的类向量容器有哪些变体?我必须写我自己的吗?[已关闭]

5sxhfpxr  于 12个月前  发布在  其他
关注(0)|答案(1)|浏览(158)

已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。

两年前关门了。
社区在12个月前审查了是否重新打开此问题,并将其关闭:

不适用于本网站我们不允许您提出有关书籍、工具、软件库等的建议。您可以编辑问题,以便用事实和引用来回答问题。

Improve this question
在我的程序中,我经常需要一个拥有数组的容器-即。对于连续存储在内存中的数据,vector是一种非常有效的方法,但vector过于灵活,实用性和效率都不如它所能达到的水平。
这些要求在一个或多个方面与std::vector不同,例如:

  • 元素只能在末尾插入,而不能移动其他元素
  • 建编后不能更改容量
  • 编译后不能更改尺寸
  • 存储是类固有的,不涉及分配器
  • 没有奇怪的特殊 shell ,用于像std::vector<bool>这样的单一类型
  • 引用和/或迭代器不会在插入时失效

如果有必要,我将自己实现这样一个容器,但它可能已经存在于标准库或Boost这样的流行库中。
问题是,它可能很难找到,也许它有一个你意想不到的花哨名字。那么,上面的参数空间中存在哪些类似向量的容器?
即使我的要求在现有的容器中无法满足,参考列表也会有所帮助:如果我最终实现了一个新的容器,我可以采用适当的名称,避免混淆名称。

yqkkidmi

yqkkidmi1#

以下是我所知道的:

还有“可变长度数组”和“带运行时边界的数组”,它们在C中不存在;前者存在于C.参见this questionthis answer关于这些非C容器。
让我们比较一下所有这些的特点。如果您想要的容器与下面的行不完全匹配,您需要实现自己的容器并为它选择一个名称。
| 标准|C数组|阵列|向量|唯一指针|valarray|动态阵列|静态矢量|小向量|稳定向量|
| --|--|--|--|--|--|--|--|--|--|
| Origin/library|语言|STD| STD| STD| STD|丢弃标准品|提振|提振|提振|
| 类型参数|T、N| T、N| T、A|不|不|不|T、C、O| T,N,A,O| T、A|
| 容量固定时间|编译|编译|从未|(结构)|从未|构建体|编译|从未|从未|
| 尺寸固定时间|编译|编译|从未|N/A|从未|构建体|构建体|从未|从未|
| 大小=容量始终?| ✔ | ✔ | ✕ |N/A| ✕ | ✔ | ✕ | ✕ | ✕ |
| 存储通常在|堆叠|堆叠|堆|堆|堆|堆|堆叠|堆栈/堆|堆|
| 稳定的迭代器?|N/A| N/A| ✕ |N/A| N/A| N/A|(✔)| ✕ | ✔ |
| 元素类型约束| ✕ | ✕ | ✕ | ✕ | ✔ | ✕ | ✕ | ✕ | ✕ |
模板参数图例:

  • A表示分配器
  • T表示元素类型
  • N表示元素数量的大小
  • C表示元件数量的容量
  • O代表选项

最后,一个有趣但不太流行的类向量容器是"veque",或deque-vector amalgam。

相关问题