我想使用" vector":
创建一个矩阵vector < vector <int> > Mat;
问题是,当我运行此代码时:
int i ,j;
for(i = 1 ; i <= 5 ; ++i)
for(j = 1 ; j <= 5 ; ++j)
Mat[i][j] = 0;
我会得到一个非常讨厌的错误。我该如何解决这个问题?
我不想这样读取矩阵:
for(i = 1 ; i <= 5 ; ++i)
for(j = 1 ; j <= 5 ; ++j)
M[i].push_back(0);
答案 0 :(得分:6)
当您以这种方式创建矢量时,它们的维度为0.您必须使用良好的大小初始化它们:
vector < vector <int> > Mat(6, std::vector<int>(6));
顺便说一句,在第二个向量初始化中添加0将确保它将填充0:
vector < vector <int> > Mat(6, std::vector<int>(6, 0));
答案 1 :(得分:2)
当你创建一个向量时,它会从空开始,除非你告诉它大小应该是什么。如果向量为空,则不能使用[]
,因为它不进行任何范围检查,也不会增长向量。这将为您提供两个选项,使用push_back()
或在创建向量时为其提供大小。例如,我们可以使用
const int matrix_size = 5;
auto mat = std::vector<std::vector<int>>(matrix_size, std::vector<int>(matrix_size));
// ^# of rows^ ^# of cols^
还要记住索引是基于C ++的0。这意味着对于具有5个元素的向量,有效索引为[0, 4]
。我们可以使用ranged based for loop来填充像
for(auto& row : mat)
for(auto& col : row)
std::cin >> col;
这将填充cin
。
答案 2 :(得分:1)
vector < vector <int> > Mat;
这会创建一个空的Mat;
vector < vector <int> > Mat (5);
将使用5个“内部”向量创建它。问题仍未解决,您还需要调整内部向量的大小。
你可以通过以下方式做到这一点:(还有很多其他更好的方法)
for(int i =0;i<5;i++)
{
Mat[i].resize(5); // resizing the interior matrices
}
答案 3 :(得分:0)
正如其他答案所述,您需要使用std::vector
构造函数和元素的初始数量,以避免以后push_back
将这些元素放入向量中。但是,如果您要使用 zeros 初始化矩阵,则无需指定默认的初始值设定项,因为自C ++ 11起,vector(size_type count)
形式可确保将非类类型,例如int
:
vector < vector<int> > Mat( 6, vector<int>(6) );
这将创建一个6x6的零整数矩阵。
答案 4 :(得分:0)
使用std :: array可能更好。
std::array< std::array<int, 6>, 6> matirx;
for(auto& row: matrix)
for(auto& col: row)
col = 0;