2016-04-29 133 views
-2

我的问题是,当我试图通过另一种二维矢量乘以一个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; 
} 
+4

你在哪里设置Mat_3'的'尺寸是多少? – sietschie

+0

“崩溃”不是问题描述。使用调试器来挖掘问题。 – Drop

+0

没有设置它,我应该吗? –

回答

1

你没有初始化第三个矩阵,你正在对它进行索引操作,那就是未定义的行为。你可以这样做....

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; 
} 
+0

投票现在在另一个方向:) – user2079303

+0

没有得到确切的结果! –

+0

@ Rafikox05,你期待什么确切的结果? – WhiZTiM

1

这条线会引起问题:

Mat_3[i][j] = 0; 

既然你(ATLEAST从你显示的代码)从未初始化Mat_3,试着加入:

setVector(Mat_3,5,5); 
+0

setVector()将用随机值初始化一个向量:) –

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; 
}