【发布时间】:2016-08-29 21:19:05
【问题描述】:
我正在尝试修复一些大量使用向量的代码,并且有些循环看起来像这样:
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"the vector capacity is not guaranteed to change" 时,我实际上希望容量能够保证没变。也许我只是误解了 cplusplus.com 上写的内容。但是,我的问题是:
如何在不改变容量的情况下清除矢量?
我应该在clear 之后调用reserve 以确保容量相同吗?
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();
}
即。我仍然想通过push_back 填充它,我担心clear() 会改变向量的容量。
【问题讨论】:
-
这里有相关的讨论。共识似乎是调整向量 SMALLER 的大小不得影响容量。 stackoverflow.com/questions/1624803/…
-
@Cubbi 在阅读了该答案之后的讨论后,我非常确信
clear不允许更改容量,因此我的问题有点过时(并且 cplusplus 在这一点上似乎是错误的)。我的教训是:永远不要相信除了标准之外的任何人;)