使用2D矢量时出现分段错误

时间:2013-11-15 16:57:56

标签: c++ vector

我正在尝试使用2D矢量创建矩阵。我不明白为什么编译器给我分段错误的错误。任何的想法? :)

这是我的代码:

 #include <iostream>
 #include <vector>
 using namespace std;

 int main(){
 vector < vector <int> > Board;
 int n;
 cout<<"Enter size: ";
 cin>>n;
 Board.resize(n);

   //Initialize with something
 for(int ii=0; ii<n; ii++)
 {
 for (int jj=0; jj<n; jj++)
    Board[i][j]=1;
  }

  //Show vector 
  for(int i=0; i<n; i++)
  {
    for (int j=0; j<n; j++)
   {
    cout<<Board[i][j]<<" ";
   }
    cout<<endl;
   }
  return 0;
 }

我也尝试使用“Board.at(i).at(j)= 1”这个表达式填充向量,但没有任何反应。

2 个答案:

答案 0 :(得分:4)

之后:

Board.resize(n);

你有一个包含n个空向量的向量。然后,您可以像访问n个元素一样访问它们。如果你想让你的矢量看起来像一个n×n矩阵,你可以像这样初始化它:

vector <vector<int>> Board(n, std::vector<int>(n));

请注意,这里有一些开销。向量向量更像是指向数组的动态指针数组。使用单个向量可能更有意义,提供两个索引接口来模拟2D数组。

答案 1 :(得分:1)

Board.resize(n)仅调整最外层的向量。如果你想要一个方形板,你还需要调整内部向量的大小。试试Board.resize(n, std::vector<int>(n))

此外,虽然我(可能)引起了您的注意,但在您的文件顶部说using namespace std;generally considered不良做法。最好在标准库中完全限定名称。例如,std::vector,或者,对于非常偏执的人,::std::vector