尽管索引容量不足,但vector.at()仍会出现扼流圈

Ota*_*our 1 c++ std stdvector

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

因此我为一个向量分配空间.

std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
Run Code Online (Sandbox Code Playgroud)

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

dpMeanUnnormalizedRef.at(index)=doubleVar;
Run Code Online (Sandbox Code Playgroud)

此时,大小为0,容量为621,而索引的值为0.然而,此调用导致程序抛出超出范围的异常.

Mar*_*som 6

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