【问题标题】:vector.at() chokes despite index being well under capacityvector.at() 尽管索引远远低于容量,但仍会阻塞
【发布时间】:2013-05-31 14:50:55
【问题描述】:

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

我因此为向量分配空间。

std::vector<double> dpMeanUnnormalizedRef;
dpMeanUnnormalizedRef.reserve(expectedUpperLimit);

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

dpMeanUnnormalizedRef.at(index)=doubleVar;

此时,大小为 0,容量为 621,而 index 的值为 0。然而这个调用导致程序抛出超出范围的异常。

【问题讨论】:

  • 也许你想要std::map&lt;int,double&gt;。这样你就可以只添加你想要的索引。
  • “索引容量不足”?为了使at 工作,索引必须小于 size,而不是小于 capacity

标签: c++ std stdvector


【解决方案1】:

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

【讨论】:

    【解决方案2】:

    正如马克所说,reserve 只帮助vector 管理它的内存,它实际上并没有添加元素,你可以使用assign

    代替

    dpMeanUnnormalizedRef.reserve(expectedUpperLimit);
    

    使用

    dpMeanUnnormalizedRef.assign(expectedUpperLimit,0.0);
    

    您也可以使用resize 或构造函数本身。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-11-09
      • 2017-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-23
      相关资源
      最近更新 更多