【发布时间】:2018-10-23 19:34:30
【问题描述】:
我喜欢为std::vector<std::vector<TYPE>> 中的内部向量保留内存,以避免在随后的push_back 中分配大量单个内存。我不知道向量的innerSize到底是什么,但我可以给出一个很好的估计。
std::resize可以用作
vecs.resize(outerSize, std::vector<TYPE>(innerSize));
其中outerSize 和innerSize 是整数。这对我不起作用,因为默认构造函数不适用。但是std::reserve 没有提供这样的接口。
这是为所有内部向量保留内存的好方法吗?
vecs.resize(outerSize);
for (auto &elem : vecs) {
elem.reserve(innerSize);
}
【问题讨论】:
-
是的,这是个好办法。
-
您的循环似乎是更好的方法。我什至认为
vecs.resize(outerSize, vector_with_reserved_size);并不能保证构建具有正确容量的内部向量。 -
请注意,
vecs.resize(outerSize, std::vector<TYPE>(innerSize));与您拥有的reserve循环非常不同。前者将使用默认构造函数初始化每个内部向量。如果TYPE很大,最终将花费比reserve循环更长的时间。编辑:稍后您必须替换现有的TYPE项目,而不是调用push_back。
标签: c++ c++11 vector memory-management