【问题标题】:Why when I'm trying to insert into a vector of sets it's telling me "vector subscript out of range"?为什么当我尝试插入集合向量时,它告诉我“向量下标超出范围”?
【发布时间】:2016-07-18 12:25:33
【问题描述】:

例如

vector< set<int> > MY_VECTOR_SETS;
MY_VECTOR_SETS[0].insert(1);

我正在尝试在MY_VECTOR_SETS 中插入第一个零。

【问题讨论】:

  • 首先你需要将一个集合推回你的向量
  • ...或在使用前致电resize()。

标签: c++ stl


【解决方案1】:

我更喜欢在给向量赋值之前使用 resize 方法:

MY_VECTOR_SETS.resize(5) //this makes your vector resize to size of 5;
MY_VECTOR_SETS[0] = 1; //assign value 1 to first element of vector

【讨论】:

  • 为什么不直接做vector&lt; set&lt;int&gt; &gt; MY_VECTOR_SETS(5);?
  • 是的,当您从一开始就知道所需的尺寸时,您也可以使用它。但是如果你想使用固定大小的数组,你可以使用常规数组,它可以让你的程序更快。
  • 这不是一个偏好——它是必需的。
  • 嗯,是的。但是当我需要动态内存分配时我使用向量,并且在第一次声明时我使用大小 0。
【解决方案2】:

为什么当我尝试插入集合向量时,它告诉我“向量下标超出范围”?

因为您正在尝试访问向量中不存在的集合。

默认构造向量为空。因此,第零索引处没有对象。尝试访问不存在的对象具有未定义的行为。

解决方案:在尝试访问第一个集合之前,请确保该向量至少包含一个集合。也许最简单的方法是使用创建非空向量的非默认构造函数之一。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-02-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多