如何在C ++中基于用户变量创建2D数组

时间:2017-09-19 12:55:39

标签: c++ arrays

我正在尝试创建一个存储用户输入的2D数组,但我很难这样做。我问用户他们需要多少天的运输,然后在用户指定X天数后,我问他们在特定日期需要运送多少物品。[Y]

例如: 提示用户输入他们需要的运输天数。用户输入X. 好的,在第1天你需要运送多少件物品。用户输入val1 好的,在第2天.....用户输入val2 等等。直到第X天

我想创建一个2D数组来解决这个问题但不确定如何初始化然后填充它。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

对于一个用户,您可以使用一维“数组”,但需要自己管理主题。 或者,您可以使用std::vector来存储值。 您有这么多天的总天数和特定值与2D“数组”数据不同。

int main()
{
    int input;
    cout << "how many?" << endl;
    cin >> input;
    int * one_way = new int[input];
    std::vector<int> or_another_way;
    for (int i = 0; i < input; ++i)
    {
        int number;
        cout << "how many on day " << i+1 << "?" << endl;
        cin >> number;
        one_way[i] = number;
        or_another_way.push_back(number);
    }
    delete[] one_way;
}

并且好像要证明我的观点,正如评论所说,我原来只是

delete one_way;

但您需要记住delete[]版本与new[]一起使用。

容易出错...

使用std::vector

答案 1 :(得分:0)

如果你真的想玩二维数组,可以选择自己构建一个,我们假设你将int存储在内部:

int** array2d;
int x,y;
//Fill x and y with user input here
array2d = new int*[x];
for (int i = 0; i < x; i++)
    array2d[i] = new int[y];

array2d[X][Y]; //use like this

//don't forget to clean after yourself ;)
for (int i = 0; i < x; i++)
    delete[] array2d[i];
delete[] array2d;

我强烈建议用class包裹这个构造,这样你就会变得干净,一切都很好,干净。例如:

class Array2D
{
private:
    int** array2d;
    int xSize, ySize;
    Array2D()
    {
        xSize = ySize = 0;
        array2d = nullptr;
    }
public:
    Array2D(int x, int y)
    {
        array2d = nullptr;
        xSize = x;
        ySize = y;
        array2d = new int*[xSize];
        for (int i = 0; i < xSize; i++)
            if (ySize > 0)
                array2d[i] = new int[ySize];
            else
                array2d[i] = nullptr;
    }

    ~Array2D()
    {
        if (xSize != 0 && ySize != 0)//checking for nullptr is better
        {
            for (int i = 0; i < xSize; i++)
                delete[] array2d[i];
            delete[] array2d;
        }
        else if (xSize != 0 && ySize == 0)//here nullptr check is also advised
        {
            delete[] array2d;
        }
    }

    int getXY(int x, int y)
    {
        return array2d[x][y];
    }

    void setXY(int x, int y, int z)
    {
        //of coure check constraints also ;)
        array2d[x][y] = z;
    }
};