我的问题是,当我尝试将2D矢量乘以另一个2D矢量并将该过程的结果存储在另一个2D矢量中时,我的程序崩溃
int main()
{
vector< vector<double> > Mat_1;
vector< vector<double> > Mat_2;
vector< vector<double> > Mat_3;
// Generate 2D vector 5 by 5
setVector(Mat_1,5,5);
setVector(Mat_2,5,5);
for(int i=0; i<5;i++)
{
for(int j=0;j<5;j++)
{
Mat_3[i][j] = 0;
for(int k=0;k<5;k++)
{
Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j];
}
}
}
return 0;
}
答案 0 :(得分:1)
此行会导致问题:
Mat_3[i][j] = 0;
由于您(至少从您显示的代码中)从未初始化Mat_3,请尝试添加:
setVector(Mat_3,5,5);
答案 1 :(得分:1)
您没有初始化第3个矩阵,而您正在对其进行索引操作,即未定义的行为。你可以这样做....
void init_2Dvector(vector<vector<double> >& vec, int x_dim, int y_dim){
vec.resize(x_dim);
for(int i=0; i < vec.size(); i++)
vec[i].resize(y_dim);
}
int main()
{
vector< vector<double> > Mat_1;
vector< vector<double> > Mat_2;
vector< vector<double> > Mat_3;
// Generate 2D vector 5 by 5
setVector(Mat_1,5,5);
setVector(Mat_2,5,5);
// Set dimension for result
init_2Dvector(Mat_3, 5, 5);
for(int i=0; i<5;i++)
{
for(int j=0;j<5;j++)
{
Mat_3[i][j] = 0;
for(int k=0;k<5;k++)
{
Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j];
}
}
}
return 0;
}
答案 2 :(得分:0)
您需要初始化Mat_3
。因此,请确保将其尺寸设置为与其他矩阵相同。
一旦您包含适当的库并且不使用using namespace std;
int main()
{
std::vector<std::vector<double>> Mat_1;
std::vector<std::vector<double>> Mat_2;
std::vector<std::vector<double>> Mat_3;
setVector(Mat_1,5,5);
setVector(Mat_2,5,5);
setVector(Mat_3,5,5); // here initialize
for(int i=0; i<5;i++)
{
for(int j=0;j<5;j++)
{
Mat_3[i][j] = 0; // here assigning zeros
for(int k=0;k<5;k++)
{
Mat_3[i][j] += Mat_1[i][k] * Mat_2[k][j]; // operation
}
}
}
return 0;
}