已关闭,此问题需要更focused。它目前不接受回答。
**想改善这个问题吗?**更新问题,使其只关注editing this post的一个问题。
两年前关门了。
社区在12个月前审查了是否重新打开此问题,并将其关闭:
不适用于本网站我们不允许您提出有关书籍、工具、软件库等的建议。您可以编辑问题,以便用事实和引用来回答问题。
Improve this question
在我的程序中,我经常需要一个拥有数组的容器-即。对于连续存储在内存中的数据,vector是一种非常有效的方法,但vector过于灵活,实用性和效率都不如它所能达到的水平。
这些要求在一个或多个方面与std::vector
不同,例如:
- 元素只能在末尾插入,而不能移动其他元素
- 建编后不能更改容量
- 编译后不能更改尺寸
- 存储是类固有的,不涉及分配器
- 没有奇怪的特殊 shell ,用于像
std::vector<bool>
这样的单一类型 - 引用和/或迭代器不会在插入时失效
- 等
如果有必要,我将自己实现这样一个容器,但它可能已经存在于标准库或Boost这样的流行库中。
问题是,它可能很难找到,也许它有一个你意想不到的花哨名字。那么,上面的参数空间中存在哪些类似向量的容器?
即使我的要求在现有的容器中无法满足,参考列表也会有所帮助:如果我最终实现了一个新的容器,我可以采用适当的名称,避免混淆名称。
1条答案
按热度按时间yqkkidmi1#
以下是我所知道的:
vector
unique_ptr
array
valarray
dynarray
static_vector
(又名:inplace_vector
;参见here和2023 proposal标准化)small_vector
stable_vector
还有“可变长度数组”和“带运行时边界的数组”,它们在C中不存在;前者存在于C.参见this question和this 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|(✔)| ✕ | ✔ |
| 元素类型约束| ✕ | ✕ | ✕ | ✕ | ✔ | ✕ | ✕ | ✕ | ✕ |
模板参数图例:
最后,一个有趣但不太流行的类向量容器是"veque",或deque-vector amalgam。