[英]declare and delete this version of a 2D array in c++
int *array[10];
for(int i = 0; i < 10; i++)
array[i] = new int[10];
//...
void passFunc(int *a[10]) //array containing pointers
{
//...
}
passFunc(array);
我试图弄清楚如何声明和删除此版本的2D数组。 我开始使用int **数组,但是为了使一段代码更容易,我需要切换到* []。 谁能帮我吗? 我试图编译我的实际代码(上面的代码只是一个例子),看起来像这样:
int* filedata[LENGTH] = new int*[LENGTH]; //ERROR: array must be initialized with brace- enclosed identifiers.
编辑:谢谢!
像这样
int** array = new int*[sizeX];
for(int i = 0; i < sizeX; ++i)
array[i] = new int[sizeY];
删除
for(int i = 0; i < sizeX; ++i)
delete [] array[i];
delete [] array;
如果我正确理解了您想要的内容,那么分配和释放将看起来像
int ** filedata = new int * [LENGTH];
for ( int i = 0; i < LENGTH; i++ ) filedata[i] = new int [LENGTH];
//...
for ( int i = 0; i < LENGTH; i++ ) delete [] filedata[i];
delete [] filedata;
给定版本的替代版本:
int** array = new int*[sizeX];
int *pool = new int[sizeX * sizeY];
for(int i = 0; i < sizeX; ++i, pool += sizeY)
array[i] = pool;
删除:
delete [] array[0];
delete [] array;
使用此方法的优点是:
无论列数是多少,只需两次调用new[]
和delete[]
。 在上一个答案中,对new
和delete
的调用数取决于列数。 这样可以减少碎片,如果列数非常大,也可能会提高速度。
数据是连续的。 您可以使用简单的偏移量从任何其他元素访问2d数组中的任何元素。
缺点是每行的列数必须相同,否则将很难维护。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.