为什么"std::cout << myVector[x][x] << std::endl"会产生下标错误?

Why does "std::cout << myVector[x][x] << std::endl" produce a subscript error?

本文关键字:lt std 下标 错误 endl myVector 为什么 cout      更新时间:2023-10-16

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

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

这是我的代码

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;
}

非常感谢!

当在循环内部执行std::vector<int>(x,x)时,当x=0时,分配zero elements。其他时候,您可以分配x元素(行索引:x,列索引:0,1,...x-1),并访问第x行中的第x+1个元素。

所以把它改成

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