首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在C++中创建基于用户变量的二维数组

如何在C++中创建基于用户变量的二维数组
EN

Stack Overflow用户
提问于 2017-09-19 20:55:39
回答 2查看 69关注 0票数 0

我正在尝试创建一个存储用户输入的二维数组,但这样做很困难。我问用户他们需要多少天的送货时间,然后在用户指定X天后,我问他们在特定的一天需要送货多少件商品。Y

例如:提示用户输入他们需要的休运天数。用户输入X好的,在第一天你需要发货多少件。用户在第2天输入val1 on .....用户输入val2等。一直到第X天

我想创建一个二维数组来解决这个问题,但不确定如何初始化并填充它。

非常感谢你的帮助。

EN

回答 2

Stack Overflow用户

发布于 2017-09-19 21:12:40

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

代码语言:javascript
运行
复制
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;
}

似乎是为了证明我的观点,正如评论指出的那样,我最初只是

代码语言:javascript
运行
复制
delete one_way;

但您需要记住,new[]附带的delete[]版本。

容易出错...

使用std::vector

票数 0
EN

Stack Overflow用户

发布于 2017-09-20 06:05:30

如果你真的想尝试2D数组,你可以自己动态构建一个,比方说你将在里面存储int

代码语言:javascript
运行
复制
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来包装这个结构,这样你就会感觉很舒服,一切都很好很干净。例如:

代码语言:javascript
运行
复制
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;
    }
};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46301074

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档