我正在尝试使用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”这个表达式填充向量,但没有任何反应。
答案 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
。