我有一个充当固定容量容器(Graph 类)的类,并且我有一个没有默认构造函数的类,它将成为该容器(Node 类)的元素。
我希望图表创建节点,给我返回刚刚创建的节点的引用。
使用
std::vector<Node>
使用 reserve
和 push_back
就很简单了。但是,如果可能的话,我宁愿避免使用堆。
我尝试使用
std::array
但我的理解是数组中的元素必须初始化。但这是不可能的,因为元素不是默认可构造的。
我该怎么做才能获得类似于矢量
reserve
但在静态/堆栈内存中的东西?
当您想要具有 std::vector 语义的 std::array 时,您想要的是 std::static_vector 或 fixed_capacity_vector。
不幸的是,它还没有完全标准化。
有一些实现,例如gnzblg的github、boosts、EASTLs的fixed_vector或folly的small_vector中的实现。其中一些具有“后备”功能,如果您超过预先分配的大小,它们将恢复到正常的
vector
行为。