Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/151.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用STL向量创建矩阵_C++_Matrix_Vector_Stl - Fatal编程技术网

C++ 使用STL向量创建矩阵

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

我想使用“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::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;