2014-11-25 64 views
-2

我正在编写一个程序来输出矩阵的转置。当我在矩形或列数多于矩形的矩阵上使用它时,该程序起作用,但当我尝试在矩阵上使用行数多于列的矩阵时,该程序会产生错误的输出。在C++中计数错误

该程序的杰作是它将数字读入一个矢量,然后将该矢量推到2D矢量data上。在这部分代码工作正常(据我可以告诉),我认为错误是在这些循环

if (data[0].size() < data.size()) // number of columns < number of rows BREAKS 
{ // test52 gets here 
for(size_t i=0; i<data[0].size(); ++i) // loops over the number of rows 
{ 
    for(size_t j=0; j<data.size(); ++j) // loops over the number of columns (the number of entries in each row) 
    { 
    cout << data[j][i] << "\t"; 
    } 
    cout << endl; 
} 

}

如果我与矩阵

1,2 
3,4 
5,6 
7,8 
9,10 

运行此输出是1 3 5 7 9,所以它错过了第二列。

我在编译和运行时没有遇到任何错误。我一直盯着代码一个多小时,对于我的生活,我无法弄清楚什么是错误的。

任何帮助,将不胜感激。

编辑

对不起大家,程序工作正常。问题是我试图让程序读取错误格式的文本文件(我忘记了逗号)!

谢谢你的帮助。

+2

在调试器中运行,逐行执行代码,观察变量(特别是'data [i]'与'data [j]')。 – 2014-11-25 12:13:14

回答

0

更换

i<data[i].size(); 

i<data[0].size(); 
+0

只是试了一下,程序给出了和以前一样的输出 – user78655 2014-11-25 12:25:59

+1

_Do not_发布“完整的代码”。发布你的[testcase](http://sscce.org)。 – 2014-11-25 12:39:08

0

此:

for(size_t i=0; i<=data[0].size(); ++i) // loops over the number of rows 

应该是这样的:

for(size_t i=0; i<data[0].size(); ++i) // loops over the number of rows 

您正在遍历该向量的末尾,并获取未定义的行为