【问题标题】:dynamic memory allocation of 2d array in which columns are of different size二维数组的动态内存分配,其中列的大小不同
【发布时间】:2014-07-28 01:29:29
【问题描述】:

我想用 C++ 语言动态创建一个二维数组。但是在那个二维数组中,列的大小应该不同。我的意思是说二维数组不应该在 M * N 中。

应该是……

1 2 next line
3 4 5 next line
2 3 4 5 next line
5 next line
4 5 7

我能够以上述方式创建二维数组,但是如何连续显示数组的内容给我带来了问题。 请任何人解释我如何提出这个问题。

【问题讨论】:

  • 数组 shd 在.. 1 2 3 下一行 4 5 下一行 2 3 4 5 下一行 5 下一行 4 5 7 5 下一行
  • 这些被称为jagged arrays。但是,我不清楚您要完成什么。您应该编辑您的帖子以澄清。
  • 请显示分配非锯齿数组的代码,这样可以更容易地制定答案。
  • "我想用 C++ 语言动态创建一个二维数组" - 你在这里:std::vector<std::vector<int>> arr;

标签: c++ arrays 2d


【解决方案1】:

最好的方法是使用vectors。它们是可调整大小的数组,可自动处理所有内存管理。在这种情况下,您可以创建一个二维向量。

但是,如果出于某种原因您不想使用向量并想使用 C 样式的数组,那么您可以通过创建一个指针数组并为每个指针分配不同数量的内存来实现。为了存储它们的大小,我们可以遵循在每个数组中分配一个额外的单元格来存储该数组的大小的策略。

int main()
{
    const int no_of_arrays=10;
    int array_size[no_of_arrays]= {1,4,2,4,3,6,8,9,1,3}; // Different size for each array
    int *p[no_of_arrays];  // An array of pointers
    for(int i=0; i<no_of_arrays; i++)
    {
        p[i]=new int[array_size[i]+1];  // Allocating
        p[i][0]=array_size[i];  // The first cell holds the size of the array
        for(int j=1; j<=p[i][0]; j++)
        {
            p[i][j]=10;  // Fill the array with the desired values;
        }
    }

    // Display the arrays
    for(int i=0; i<no_of_arrays; i++)
    {
        for(int j=1; j<=p[i][0]; j++)
        {
            std::cout<<p[i][j]<<" ";
        }
        std::cout<<"\n";
    }

    /*
     *
     * Do your thing with the arrays.
     *
     */

    // Deallocate the memory allocated to the arrays
    for(int i=0; i<no_of_arrays; i++)
    {
        delete[] p[i];
    }
}  

但是,不建议这样做,因为它会导致很多问题(例如,如果您忘记在 new 之后使用 delete 会导致内存泄漏)。如果您事先不知道数组的大小,请优先使用向量。

【讨论】:

    猜你喜欢
    • 2020-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多