2014-03-18 44 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