【问题标题】:Create a 2D array with variable sized dimensions创建具有可变大小尺寸的二维数组
【发布时间】:2015-04-29 12:59:22
【问题描述】:

我希望能够创建一个二维数组,其大小与我从文件中读取的宽度和高度相同,但是当我说:

int array[0][0]
array = new int[width][height]

【问题讨论】:

标签: c++ arrays


【解决方案1】:

你应该使用指向指针的指针:

int** array;
array = new int*[width];
for (int i = 0;i<width;i++)
    array[i] = new int[height];

当你用完它或者你想调整大小时,你应该像这样释放分配的内存:

for (int i = 0;i<width;i++)
    delete[] array[i];
delete[] array;

要了解并能够阅读更复杂的类型,此链接可能有用:

http://www.unixwiz.net/techtips/reading-cdecl.html

希望对您有所帮助。

【讨论】:

  • ...记得用delete[]删除。
  • TAMER 我认为你需要交换你的高度和宽度。
【解决方案2】:

如果数组是矩形的,就像你的例子一样,你可以只分配一次:

int* array = new int[width * height];

这有效地将数组扁平化为一维,而且速度更快。

当然,这是C++,为什么不用std::vector&lt;std::vector&lt;int&gt; &gt;

【讨论】:

    【解决方案3】:

    试试这个方法:

      int **array; // array is a pointer-to-pointer-to-int
    
        array = malloc(height * sizeof(int *));
        if(array == NULL)
            {
            fprintf(stderr, "out of memory\n");
            exit or return
            }
        for(i = 0; i < height ; i++)
            {
            array[i] = malloc(width * sizeof(int));
            if(array[i] == NULL)
                {
                fprintf(stderr, "out of memory\n");
                exit or return
                }
            }
    
        array = new int*[width];
        if(array == NULL)
            {
            fprintf(stderr, "out of memory\n");
            exit or return
             }
        else
        {
        for (int i = 0;i<width;i++)
            array[i] = new int[height];
        }
    

    【讨论】:

    • 你应该避免在 C++ 中使用malloc
    • 这是一种真正的C-ish 做事方式。另外,fprintf 电话在这里确实没有位置。它可以使用一些清理。
    猜你喜欢
    • 1970-01-01
    • 2012-07-17
    • 1970-01-01
    • 1970-01-01
    • 2020-07-25
    • 1970-01-01
    • 2019-01-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多