C++ 使用STL向量创建矩阵
我想使用“vector”创建一个矩阵:C++ 使用STL向量创建矩阵,c++,matrix,vector,stl,C++,Matrix,Vector,Stl,我想使用“vector”创建一个矩阵: vectorMat; 问题是,当我运行此代码时: int i ,j; for(i = 1 ; i <= 5 ; ++i) for(j = 1 ; j <= 5 ; ++j) Mat[i][j] = 0; inti,j; 对于(i=1;i当您以这种方式创建向量时,它们的维度为0。您必须使用合适的大小初始化它们: vector < vector <int> > Mat(6, std::v
vectorMat;
问题是,当我运行此代码时:
int i ,j;
for(i = 1 ; i <= 5 ; ++i)
for(j = 1 ; j <= 5 ; ++j)
Mat[i][j] = 0;
inti,j;
对于(i=1;i当您以这种方式创建向量时,它们的维度为0。您必须使用合适的大小初始化它们:
vector < vector <int> > Mat(6, std::vector<int>(6));
vectorMat(6,std::vector(6));
顺便说一下,在第二个向量初始化中添加一个0将确保它将被0填充:
vector < vector <int> > Mat(6, std::vector<int>(6, 0));
vectorMat(6,std::vector(6,0));
当你创建一个向量时,除非你告诉它应该是什么大小,否则它开始是空的。如果向量是空的,那么你就不能使用[]
,因为它不做任何范围检查,也不会增长向量。这就给你留下了两个选项,使用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^
这将填充来自cin
vectorMat的向量中的每个元素;
vector < vector <int> > Mat;
这就产生了一个空垫子
vector < vector <int> > Mat (5);
vectorMat(5);
将创建5个“内部”向量。问题仍然没有解决,您还需要调整内部向量的大小
你可以这样做:(有很多其他更好的方法)
用于(int i=0;i正如其他答案所提到的,您需要使用带有初始元素数的std::vector
构造函数,以避免稍后将元素推回到向量中。但是,如果您想用零来初始化矩阵,则不需要指定默认的初始值,因为++11形式vector(size\u type count)
保证将非类类型的元素归零,例如int
:
vector < vector<int> > Mat( 6, vector<int>(6) );
vectorMat(6,vector(6));
这将创建一个带零的6x6整数矩阵。最好使用std::array
std::array< std::array<int, 6>, 6> matirx;
for(auto& row: matrix)
for(auto& col: row)
col = 0;
std::arraymatirx;
用于(自动行:矩阵(&W)
用于(自动列和列:行)
col=0;
谢谢你的回答,现在我明白了。@epanicafrate在我看来,没有问题更好的是,它是一种可以接受任意维数的泛型类型。无论是典型的4x4还是不太典型的3x4,它都会起到同样的作用。你甚至可以将它设置为在两个不同维数的矩阵上进行矩阵数学运算。
vector < vector <int> > Mat (5);
for(int i =0;i<5;i++)
{
Mat[i].resize(5); // resizing the interior matrices
}
vector < vector<int> > Mat( 6, vector<int>(6) );
std::array< std::array<int, 6>, 6> matirx;
for(auto& row: matrix)
for(auto& col: row)
col = 0;