如何使用 std::vector 中的备用容量?
什么是安全、便携、惯用的方式来使用std::vector.
std::vector<Foo> foos;
foos.emplace_back(1);
foos.emplace_back(2);
foos.reserve(10);
此时foos,至少拥有8 * sizeof(Foo)从 开始的未初始化的备用内存foos.data() + foos.size()。让这些内存浪费掉似乎非常低效。在Foo通过附加到用对象填充它之前,如何将此空闲容量用作暂存空间或用于其他目的foos?在不调用任何未定义行为的情况下执行此操作的正确方法是什么?
回答
通过插入更多元素。
更复杂的答案可能是您正在寻找的答案,但可能比它的价值更复杂:
您可以自己分配内存(std::allocator或其他什么;不要忘记std::unique_ptr),并实现使用该内存的自定义分配器。然后,您可以将该内存用于任何用途,然后使用自定义分配器创建一个向量。请注意,这不会让您使用已经为 vecor 保留的内存;您只能在被向量获取之前使用内存。