【问题标题】:Are not they are same? Problem with calling vector element他们不是一样吗?调用向量元素的问题
【发布时间】:2020-07-22 21:10:50
【问题描述】:
vector< vector<int> > vec_c(3);

//Code #1
for(int i = 0; i < vec_c.size(); i++){
   for(int j = 0; j < vec_c[i].size(); j++){
      cout << vec_c[i][j] << " ";
   }
   cout << endl;
}

//Code #2
cout << "It is here" << vec_c[0][0] << endl;

所以我的代码的第一部分运行顺利,输出向量没有任何问题,但是当我尝试单独调用向量中的元素时,它显示“分段错误”。我不知道为什么,因为基本上他们两个都在做同样的事情。

【问题讨论】:

  • 2nc 代码不检查访问是否有效,如果任何向量为空,则您的访问越界,导致未定义行为。
  • 是的,我理解这一点,但是当代码 #1 运行时,它首先应该通过 cout
  • 我们需要猜测。为此,您需要提供一个代码示例来重现您正在经历的行为。使用minimal reproducible example 作为灵感。 MRE 的真正美妙之处在于,如果不将 bug 周围的噪音水平降低到您凝视几秒钟、咕哝几句诅咒,然后在没有任何帮助的情况下修复 bug 的程度,就很难做出一个 MRE。

标签: c++ vector 2d-vector


【解决方案1】:

vec_c[0] 返回一个空的std::vector&lt;int&gt;。因此,vec[0][0] 无效。

您的第一个示例没有失败的原因是:

for(int j = 0; j < vec_c[i].size(); j++){

检查 vec_c[0] 的大小,即 0,因此循环没有实际的迭代。

【讨论】:

    猜你喜欢
    • 2011-04-25
    • 1970-01-01
    • 2011-03-14
    • 1970-01-01
    • 1970-01-01
    • 2014-10-08
    • 1970-01-01
    • 1970-01-01
    • 2011-10-20
    相关资源
    最近更新 更多