2014-03-18 173 views
0

我嘗試過沒有錯誤,[2x2] * [2x2]和[2x3] * [3x2]。 「奇數 * 一個 *」是來自[3x2] * [2x3]的輸出。其輸出如下所示:第1行:[9 10 11],第2行:[39 44 49],第3行:[69 78 87 0 0 0297 0]。與之前的2x2和(2x3 * 3x2)試驗不同,第3行的輸出是添加元素。矢量乘法(矩陣乘法)奇數輸出向量

這裏是我的代碼片斷,我相信這個問題可能存在。

int sum; 
outputVec.resize(vec1.size()); 
for(int i = 0; i < vec1.size(); i++) 
{ 
    for(int k = 0; k < vec2[i].size(); k++) 
    { 
     sum = 0; 
     for(int j = 0; j < vec1[i].size(); j++) 
     { 
      sum += (vec1[i][j] * vec2[j][k]); 
     } 
     outputVec[i].push_back(sum); 
    } 
} 
for(int i = 0; i < outputVec.size(); i++){ 
    for(int j = 0; j < outputVec[i].size(); j++){ 
     printf("%3d",outputVec[i][j]); 
    } 
    cout << endl; 
} 
+0

'printf()'? **爲什麼?** – Manu343726

+0

@ Manu343726如果我決定使用雙打,則更易於格式化數字。 – TrickyNicky

回答

0
for(int i = 0; i < vec1.size(); i++) 
{ 
    for(int k = 0; k < vec2[i].size(); k++) 
    ... 

vec2不一定有儘可能多的行,vec1(如在(3×2)*(2×3)的情況下)。您正在閱讀vec2的結尾,並獲得未定義的行爲。

+0

我現在看到。非常感謝。 – TrickyNicky