1

我正在使用 Debian 7.0.0 下的 CodeBlocks 10.05 开发 C++ 应用程序。

因此,我将空间分配给向量。

std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);

然后我尝试添加一个值。不幸的是,我需要添加值的索引不是连续的,所以我不能使用 push。我第一次尝试添加元素时,调用如下。

dpMeanUnnormalizedRef.at(index)=doubleVar;

此时,大小为 0,容量为 621,而 index 的值为 0。但此调用导致程序抛出超出范围的异常。

4

2 回答 2

6

reserve只需为项目保留物理空间,而无需实际将它们添加到向量中。当您提前知道向量有多大时,它旨在通过减少重新分配的次数来提高效率。你需要使用resize.

于 2013-06-05T03:05:27.533 回答
2

正如马克所说,reserve只帮助vector管理它的内存,它实际上并没有添加元素,你可以使用assign

代替

dpMeanUnnormalizedRef.reserve(expectedUpperLimit);

利用

dpMeanUnnormalizedRef.assign(expectedUpperLimit,0.0);

您也可以使用resize构造函数本身。

于 2013-06-05T03:14:07.707 回答