C++ 标准库中有一个 new std::inplace_vector
,它似乎在编译时具有固定容量。我试图理解std::inplace_vector
而不是std::array
或 的用例std::vector
。它似乎具有固定大小std::inplace_vector
容量的优势,就像 一样,但在插入之前不需要对象初始化。但是,与 不同,它具有固定的编译时容量。std::array
std::vector
std::inplace_vector
std::inplace_vector
有人可以提供一个可能有用的例子吗?
std::array
如果默认构造数组,则要求元素类型是默认可构造的std::inplace_vector
另一方面,由于默认构造不会在向量中创建任何对象这也意味着您可以使用循环来初始化的成员,
inplace_vector
而不能使用std::array
。此外, @Quimby指出
std::inplace_vector
提供一个可调整大小的容器,完全避免内存分配。此类型可用作快速本地容器,只要:
std::inplace_vector:
该部分与(大多数)std::vectors类似(bool 的向量可以不同)
如果您处理的 C 库提供具有上限的可变大小数组,那么这会非常方便,该上限可能由库定义,也可能由您的用例定义。
我认为外观和感觉像std::vector 的东西比带有单独大小变量的普通老式 C 数组好用得多。
在std::vector上,很容易忘记
reserve()
正确操作,这可能会导致无效指针或性能下降。使用std::inplace_vector时,编译器会强制您考虑保留的内存,而不是难以检测无效指针,您会注意到试图
push_back()
超出最大大小的错误。因此在某些情况下,它可以防止您犯错。
std::inplace_vector的元素作为对象的直接成员存储,因此可能存储在堆栈中。
请注意局部变量的大小,堆栈通常比堆小得多。