我正在使用Debian 7.0.0下的CodeBlocks 10.05开发一个C ++应用程序。
因此我将空间分配给矢量。
std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
然后我尝试添加一个值。不幸的是,我需要添加值的索引不是顺序的,所以我不能使用push。我第一次尝试添加元素时,调用如下。
dpMeanUnnormalizedRef.at(index)=doubleVar;
此时,大小为0,容量为621,而索引的值为0.然而,此调用会导致程序超出范围异常。
答案 0 :(得分:6)
reserve
只需保留项目的物理空间,而无需将它们实际添加到矢量中。当您知道向量将提前有多大时,它旨在通过减少重新分配的数量来提高效率。您需要使用resize
。
答案 1 :(得分:2)
正如马克所说,reserve
仅帮助vector
管理其内存,实际上并未添加元素,您可以使用assign
而不是
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
使用
dpMeanUnnormalizedRef.assign(expectedUpperLimit,0.0);
您也可以使用resize
或构造函数本身。