【问题标题】:Why does "std::cout << myVector[x][x] << std::endl" produce a subscript error? [closed]为什么“std::cout << myVector[x][x] << std::endl”会产生下标错误? [关闭]
【发布时间】:2015-02-12 11:32:00
【问题描述】:

这可能是一个非常简单的问题,但它困扰着我。 我可以将数据放入容器中,但似乎无法将其打印到控制台。

以下会产生下标超出范围的调试错误

这是我的代码

std::vector<std::vector<int>> myVector;

for (int x = 0; x != 18; x++)
{
   myVector.push_back(std::vector<int>(x,x));
   std::cout << myVector[x][x] << std::endl;
}

非常感谢!

【问题讨论】:

  • C++ 中的索引是从零开始的。您将 x 元素放入向量中,但您正在尝试访问 x+1st 元素。
  • 换句话说,它告诉你它超出了范围,因为它是(错误很有用!)。我还要补充一点,大多数流行的编程语言都有从 0 开始的索引。

标签: c++ stl stdvector


【解决方案1】:

当你在 for 循环中执行 std::vector&lt;int&gt;(x,x) 时,x=0 分配 zero elements。在其他时候,您分配 x 元素(行索引:x 和列索引:0,1,...x-1)并访问xth 行中的x+1th 元素。

所以改成

for (int x = 0; x != 18; x++)
{
  myVector.push_back(vector<int>(x+1,x));
  std::cout << myVector[x][x] << std::endl;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-07-23
    • 2017-05-13
    • 2020-03-19
    • 2021-08-04
    • 2014-08-14
    • 1970-01-01
    相关资源
    最近更新 更多