已经初始化我的二维矩阵后动态增加行数

Posted

技术标签:

【中文标题】已经初始化我的二维矩阵后动态增加行数【英文标题】:Dynamically incrementing number of rows after already initializing my 2d matrix 【发布时间】:2017-05-14 11:09:22 【问题描述】:

我有一个问题似乎在这个网站或其他网站上没有得到回答,我对这些东西还很陌生,所以这是我在网站上的第一个问题。我想在我的二维数组中添加行,每次用户输入字符“a”“l”(添加行)时,他都会在这两个字符之后输入数字。 (这做了几次)这意味着每次用户输入“al”后行的长度都会增加。我如何初始化一个我不知道它可能有多少行的矩阵?然后在编译时间内添加行

我的问题是,一旦我已经将行的长度初始化为特定的长度,我该如何改变它,或者这是否可能?

【问题讨论】:

【参考方案1】:

您可以使用数据结构vector,它允许在需要时动态更改其大小。这是一个简单的示例,其中使用向量的push_back 方法将新行添加到现有二维数组中。你可以阅读更多关于矢量here的信息。

int main()

    std::vector<std::vector<int>> vec1, 2, 3, 4, 5, 6; // Initializes a 2x3 array

    vec.push_back(7, 8, 9); // Adds a new line to the array

    for (int i = 0; i < vec.size(); i++)
    
        for (int j = 0; j < vec[i].size(); j++)
        
            std::cout << vec[i][j];
        

        std::cout << "\n";
    

    return 0;

或者,您可以为数组动态分配内存,但这有几个缺点。 C++ 数组是固定大小的,调整它们大小的唯一方法是创建一个新数组,将旧数组复制到其中,删除旧数组并继续工作。这可能会很快变得混乱,我建议不要这样做。连续复制和内存分配是相当有任务的操作。如果您绝对必须避免使用向量,那么我建议声明一个足够大的数组来容纳您的用户可以添加的所有行,然后只使用一个计数器来标记当前使用的行数。下面是一个如何声明动态二维数组的简单示例。

int main()

    int m = 2; // Number of rows
    int n = 3; // Number of columns

    int **arr = new int*[m];

    for (int i = 0; i < m; i++)
    
        arr[i] = new int[n];
    

    // Continue with your work

    return 0;

更重要的是,使用new 分配的所有内容都必须使用delete 释放。

for (int i = 0; i < m; i++) // Memory cleanup

    delete arr[i];


delete[] arr;

【讨论】:

谢谢!我会读入向量,但是有没有办法只通过指针而不是使用向量来做到这一点? 不,不直接。有一些解决方法,但它们有些混乱。我已经编辑了一个关于如何使用指针的示例,但我仍然强烈建议使用向量。

以上是关于已经初始化我的二维矩阵后动态增加行数的主要内容,如果未能解决你的问题,请参考以下文章

二维数组

二维动态数组转置

JavaSE7基础 根据输入的行数 生成直角等腰三角形二维矩阵

需求层次-需求方面二维矩阵

matlab中如何计算二维数组大小?

C语言 写个给二维数组初始化的函数