已经广泛建立的类矢量容器有哪些变体?我必须自己写吗?

What variations of vector-like containers already widely established? Do I have to write my own?

在我的程序中,我经常需要一个拥有的类似数组的容器 - 即用于在内存中连续存储的数据,但是向量太灵活而且实用性或效率低于它应有的水平。

要求在一个或多个方面与 std::vector 不同,例如:

如有必要,我会自己实现这样一个容器,但它可能已经存在于标准库或像 Boost 这样的流行库中。

问题是,它可能很难找到,也许它有一个您意想不到的奇特名字。那么,上述参数 space 中存在哪些类似矢量的容器?

即使现有容器无法满足我的要求,参考列表也会有所帮助:如果我最终实现了一个新容器,我可以采用适当的名称并避免混淆名称。

以下是我所知道的:

还有“可变长度数组”和“具有运行时边界的数组”,存在于C++中;前者存在于 C 中。另请参阅 this question and 关于这些非 C++ 容器。

让我们比较一下所有这些的特点。如果您想要的容器与以下行之一不完全匹配,您需要实现自己的容器并为其选择一个名称。

Criterion C array array vector unique_ptr valarray dynarray static_vector small_vector stable_vector
Origin/library language std std std std discarded std Boost Boost Boost
Type parameters T,N T,N T,A T T T T,C,O T,N,A,O T,A
Capacity fix time Compile Compile Never (Construct) Never Construct Compile Never Never
Size fix time Compile Compile Never N/A Never Never Construct Never Never
Size = capacity always? N/A
Storage typically on Stack Stack Heap Heap Heap Heap Stack Stack/Heap Heap
Stable iterators? N/A N/A N/A N/A N/A (✔)
Constraint on element type

模板参数图例:

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

最后,一个有趣但不太流行的类似矢量的容器是 "veque",或 deque-vector 混合物。