我正在尝试修复一些大量使用向量的代码,并且有一些看起来像这样的循环:
for (int t=0;t<T;t++){
std::vector<double> vect;
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
}
我或多或少知道如何通过为外部迭代重用相同的向量来改进这一点,但是在这样做时我发现在调用 std::vector::clear
“向量容量不能保证改变” 时,我实际上是希望容量能保证不变。也许我只是误解了 cplusplus.com 上写的内容。但是,我的问题是:
如何在不改变容量的情况下清除矢量?
我应该在 --- reserve
clear
以确保容量相同吗?
PS: 为了清楚起见,我想将上面的代码重写为
std::vector<double> vect;
vect.reserve(MAX);
for (int t=0;t<T;t++){
for (int i=0;i<MAX;i++){
double value;
vect.push_back(value);
}
/*....*/
vect.clear();
}
IE。我仍然想通过 push_back
填充它,我担心 clear()
改变向量的容量。
原文由 463035818_is_not_a_number 发布,翻译遵循 CC BY-SA 4.0 许可协议
cppreference 明确表示向量的容量不变。
来自 cppreference (粗体强调它是我自己的):
编辑
正如 Dmitry Kuznetsov 在评论中指出的那样,该 标准 没有提到容量: