C ++错误向量无法正确输出

时间:2015-06-18 20:43:24

标签: c++ vector

我正在编写一个程序,我只创建一个拥有计算机的实验室,而我只是试图让三个实验室没有计算机(它们中没有计算机)。这是我试图获得的以下输出

Labs:  Computer Stations: 
1:        1: empty 2: empty 3: empty
2:        1: empty 2: empty 3: empty
3:        1: empty 2: empty 3: empty 

这是我的代码:

#include <iostream>
#include <vector>
#include <string>

using namespace std;

int main()
{
    vector<vector<string>> labs;
    vector<string> row;
    int numrows=3;
    int rowsize=3;

    for (int i=1;i<numrows+1; i++){
        for (int j=1;j<rowsize+1; j++)
            row.push_back("empty");
        labs.push_back(row);
    }


    cout<<"labs: "<<"Computer Stations:"<<endl;




    int a=1,j=1;


    for (int i=1;i<numrows+1; i++){
        cout<<a<<":     ";
        while(j<rowsize+1){
            cout<<j<<":"<<labs[i][j];
        }
        a++;
    }
}

当我尝试运行代码时,我得到以下输出,它永远在循环中继续

labs: Computer Stations:
1:     1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:empty1:

如果有人可以帮助解释我的逻辑中出了什么问题以及为什么我会得到奇怪的答案以及可能的解决方案以帮助解决我的错误,那么我将是一个快乐的c ++程序员!

1 个答案:

答案 0 :(得分:0)

问题是你没有在输出循环中增加j循环变量的值。输出循环可以这样重写:

for (size_t i = 0 ; i < labs.size(); ++i)
{
   cout << i + 1 <<":     ";
   for (size_t j = 0; j < labs[i].size(); ++j)
         cout<< j + 1 << ":" <<labs[i][j];
}

这也可以在没有厕所的情况下重写 但是,您可以采取一些措施来改进代码,以免造成这些错误。

首先,向量从索引0开始,而不是1.正如我的评论建议的那样,除非你编写了一个处理0以外的偏移量的数组的类,编写代码来伪造它总是会导致1个错误的错误代码库中的某个地方。我知道其他人会说&#34;嘿,我已经做过没有错误&#34;但是我遇到了太多的情况(超过一半的时间),即使是有经验的程序员也会这样做一个错误。

其次,这段代码:

vector<vector<string>> labs;
vector<string> row;
int numrows=3;
int rowsize=3;

for (int i=1;i<numrows+1; i++){
    for (int j=1;j<rowsize+1; j++)
        row.push_back("empty");
    labs.push_back(row);
}

可以改写如下:

int numrows=3;
int rowsize=3;
vector<vector<string>> labs(numRows, vector<string>(rowsize,"empty"));

没有循环。整个矢量的大小可以调整为一行中必需的行数和列数。

第三,使用vector::size()告诉你向量中有多少项 - 不要使用多余的变量来保存向量中的项目数。我已经看到很多情况,这些不必要的变量包含不正确的项目数,程序员使用这些错误的值。