带指针的计算机实验室

时间:2017-08-09 09:41:39

标签: c++ pointers

我负责管理计算机实验室。具体来说,有4个实验室,每个实验室都有不同数量的计算机。因此,我想用指针创建一个2D数组,但在尝试不同的东西之后,我依靠你这个错误(请!!!)。下面是我的程序的一部分,直到烦人的bug出现的地方。

我在运行1次运行后出现运行时错误(在抛出std::bad_array_new_length what(): std::bad_array_new_length的实例后调用终止),当我离开注释//问题此处这样时。

添加&在实验室前面,编译器给了我错误:左值作为赋值的左操作数。

新手在C ++中,第一次使用指针,我很感激任何帮助。

#include <iostream>

using namespace std;

//Global variables

const int SIZE = 4;
typedef int* Stations;
Stations *labroom;

//Function declaration:

void numberOfComputers();//Receive number of computers in each lab
int menu();//Display menu options for users
void menu_processor(int option);//process user's option

int main()
{
    numberOfComputers();
    menu();
    menu_processor(menu());
    return 0;
}

void numberOfComputers ()
{   char ans;
    for (int i=0;i<SIZE;i++)
    {
        cout<<"Enter the number of computer stations in lab "<<i+1<<": ";
        do
        {
            cin.get(ans);
        } while (ans!='\n');
        labroom [i] = new int [ans-'0'];//PROBLEM HERE
        cout<<"\n";
    }
}

1 个答案:

答案 0 :(得分:2)

那不是c ++代码,只是(丑陋)C。

在C ++中,静态数组为array,动态数组为vector

首先,以智能方式选择变量或功能的名称:首选getNumberOfComputersFromUser而不是numberOfComputersnumberOfComputers的含义是什么?函数名称必须描述它正在做什么。

这是一个简化的代码段:

#include <vector>
#include <array>
#include <iostream>
using namespace std;

using Station = int;
using LabRooms = array<vector<Station>, 4>;

LabRooms getNumberOfComputersFromUser()
{
    LabRooms labRooms;
    int roomIndex = 0;
    for(auto& computersInLab : labRooms)
    {
        cout << "Enter the number of computer stations in lab " << ++roomIndex << ": ";

        auto computerCount = 0;
        cin >> computerCount;
        computersInLab.resize(computerCount);
    }
    return labRooms;
}

解释

array需要两个模板参数:类型和大小。元素是静态分配的,不需要新的,因为我们已经知道我们有多少房间。每个房间的计算机列表都不知道,因此我们使用可以动态增加或减少的vector

using LabRooms = array<vector<Station>, 4>;它与typedef array<vector<Station>, 4> LabRooms相同,但我认为更清楚

for( auto& computersInLab : labRooms)遍历labRooms并获取对其元素的引用(在本例中为对vector Station的引用。这与以下内容相同:

for(int i = 0; i < labRooms.size(); ++i)
{
    auto& computersInLab = labRooms[i];
    ...
}

computersInLab.resize(computerCount);使用用户指定的值调整计算机列表的大小。

现在,labRooms是一个包含4个元素的数组,每个元素都是Station的列表。