vector.at()阻塞,尽管索引容量不足 我在Debian 7.0.0. 中使用CODBOLDEX 10.05开发C++应用程序
我这样分配空间给一个向量vector.at()阻塞,尽管索引容量不足 我在Debian 7.0.0. 中使用CODBOLDEX 10.05开发C++应用程序,c++,std,stdvector,C++,Std,Stdvector,我这样分配空间给一个向量 std::vector<double> dpMeanUnnormalizedRef; dpMeanUnnormalizedRef.reserve(expectedUpperLimit); 此时,索引的大小为0,容量为621,而索引的值为0。但是,此调用会导致程序抛出超出范围的异常。reserve只是为项目保留物理空间,而不实际将它们添加到向量中。当您提前知道向量有多大时,它旨在通过减少重新分配的次数来提高效率。您需要使用resizereserve只保留项目
std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
此时,索引的大小为0,容量为621,而索引的值为0。但是,此调用会导致程序抛出超出范围的异常。
reserve
只是为项目保留物理空间,而不实际将它们添加到向量中。当您提前知道向量有多大时,它旨在通过减少重新分配的次数来提高效率。您需要使用resize
reserve
只保留项目的物理空间,而不实际将其添加到向量中。当您提前知道向量有多大时,它旨在通过减少重新分配的次数来提高效率。您需要使用resize
正如Mark所说,reserve
仅帮助vector
管理其内存,它实际上并不添加元素,您可以使用assign
而不是
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
使用
您还可以使用
调整大小
或构造函数本身。正如Mark所说,保留
仅帮助向量
管理其内存,它实际上不添加元素,您可以使用分配
而不是
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
使用
您也可以使用
resize
或构造函数本身。也许您需要std::map
。这样,您就可以只添加您想要的索引。“容量不足索引”?为了使at
工作,索引必须小于大小,而不是小于容量。也许您希望改为std::map
。这样,您就可以只添加您想要的索引。“容量不足索引”?为了使at
工作,索引必须小于大小,而不是小于容量。
dpMeanUnnormalizedRef.assign(expectedUpperLimit,0.0);