gpt4 book ai didi

c++ - 列大小不同的二维数组的动态内存分配

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:41 25 4
gpt4 key购买 nike

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

应该是……

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

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

最佳答案

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

但是,如果由于某种原因您不想使用 vector 而想使用 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];
}
}

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

关于c++ - 列大小不同的二维数组的动态内存分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24087561/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com