c++ - 尽管索引远低于容量,vector.at() 仍然阻塞

标签 c++ std stdvector

我正在 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/

相关文章:

c++ - 为什么人们不像控制台应用程序那样将 C++ 用于 GUI?

c++ - 如何将两个 int64 的总和与 INT64_MAX 进行比较?

php - 从 PHP 连接到 C++ 服务器太多次导致访问冲突异常

C++ 代码运行时缺少 header ,为什么?

c++ - std::vector 使用 back()、pop_back()、push_back(),得到 'double free or corruption' 错误

c++ - 使用-(存档-)gcc命令

c++ - 删除循环列表时找到的列表中的对象的正确方法是什么?

vector 中的 C++ 多线程和进程

C++在循环中逐行写入文件或添加到数组并在循环后写入文件?

c++ - pmr::vector 比 std::vector 慢