2016-04-29 179 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; 
}