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

C++ Error Vector not outputting correctly

本文关键字:输出 错误 向量 C++      更新时间:2023-10-16

我正在编写一个程序,我只是创建一个有计算机的实验室,我只是想让它有三个没有计算机的实验室(他们里面有空的)。这是我尝试获取的以下输出

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++ 程序员!

问题是您没有增加输出循环中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 的数组的类,否则编写代码来伪造这一点总是会导致代码库中某处的 off-by-1 错误。 我知道其他人会说"嘿,我做得没有错误",但我遇到过太多的情况(超过一半的时间),即使是经验丰富的程序员也会犯一个错误。

二、这段代码块:

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()告诉你向量中有多少项——不要使用据称包含向量中项数的无关变量。 我见过很多情况,这些不必要的变量保存不正确的项目数,程序员使用这些错误的值。