我正在 Debian 7.0.0 下使用 CodeBlocks 10.05 开发 C++ 应用程序。
我这样给一个 vector 分配空间。
std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
然后我尝试添加一个值。不幸的是,我需要添加值的索引不是连续的,所以我不能使用推送。我第一次尝试添加元素时,调用如下。
dpMeanUnnormalizedRef.at(index)=doubleVar;
此时,大小为 0,容量为 621,而索引的值为 0。但是此调用导致程序抛出超出范围的异常。
最佳答案
reserve
只是为项目保留物理空间,而不实际将它们添加到 vector 中。当您提前知道 vector 有多大时,它旨在通过减少重新分配的次数来提高效率。您需要使用 resize
。
关于c++ - 尽管索引远低于容量,vector.at() 仍然阻塞,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16930872/