我正在运行时间敏感的代码,并且需要一个方案来为我的向量在代码中的特定位置保留更多空间,在那里我可以知道(大约)将添加多少元素,而不是std do当载体已满时,它就适合我。
我还没有找到一种方法来测试它,以确保没有我不知道的std的角落情况,因此我想知道矢量的容量如何影响内存的重新分配。更具体地说,下面的代码是否会确保自动重新分配从不?
码
std::vector<unsigned int> data;
while (condition) {
// Reallocate here
// get_elements_required() gives an estimate that is guaranteed to be >= the actual nmber of elements.
unsigned int estimated_elements_required = get_elements_required(...);
if ((data.capacity() - data.size()) <= estimated_elements_required) {
data.reserve(min(data.capacity() * 2, data.max_length - 1));
}
...
// NEVER reallocate here, I would rather see the program crash actually...
for (unsigned int i = 0; i < get_elements_to_add(data); ++i) {
data.push_back(elements[i]);
}
}
上面代码中的 estimated_elements_required
是一个估计值,保证等于或大于将要添加的元素的实际数量。实际添加元素的代码基于向量本身的容量执行操作,中途改变容量将产生不正确的结果。
答案 0 :(得分:1)
是的,这会有用。
从reserve
:
保证在调用
reserve()
之后发生的插入过程中不会发生重新分配,直到插入使向量的大小大于capacity()
的值为止。