c++向量的一维和二维数组赋值



我对c++两个二维向量感到困惑

#include <vector>
int main()
{
//First Code
std::vector<int> oneDimArray;
oneDimArray.push_back(5);
for (int i = 0; i < oneDimArray.size(); i++)
{
std::cout << oneDimArray[i];
}
//Second Code
std::vector<std::vector<int>> twoDimArray;
twoDimArray[0].push_back(5);                          //Here giving error
for (int i = 0; i < twoDimArray.size(); i++)
{
for (int j : twoDimArray[i])
{
std::cout << j;
}
}
return 0;
}

当我尝试运行此代码时,第一个代码正在工作。但在第二个代码中,我在尝试推回时得到了向量超出范围的错误。我想一开始我应该说twoDimArray的第一个尺寸。但我不知道怎么说。因为我在.h文件中定义了这个twoDimArray,所以如果我这样做,我必须在那里做。你能帮我吗?

发生这种情况的原因有两个。
  1. 您试图访问的矢量为空
  2. 您正试图将一个int放入一个本应包含vector<int>s的向量中。固定代码:
#include <vector>
#include <iostream>
int main()
{
std::vector<int> oneDimArray;
oneDimArray.push_back(5);
for (int i = 0; i < oneDimArray.size(); i++)
{
std::cout << oneDimArray[i];
}
std::vector<std::vector<int>> twoDimArray;
twoDimArray.push_back(oneDimArray); //You can put a vector of ints in here
for (int i = 0; i < twoDimArray.size(); i++)
{
for (int j : twoDimArray[i])
{
std::cout << j;
}
}
return 0;
}

twoDimArray[0].push_back(5)无效,因为矢量还没有大小。在您推后某些内容,或在此处执行twoDimArray.resize(新大小);后,您可以执行此操作(只要它不超出范围(。

此外,一旦向量具有大小,就可以像twoDimArray[0][0] = 1;一样访问向量内部的向量元素。这将给出向量内部第一个向量的第一个值,以获得值1。