三个方法:
1.用两层vector模版直接做。
2.用一维数组模拟二维,即int * p = new int [x * y];分配一个x * y大的数组,然后要用的时候把二维下标映射到一维中,这样做的最大好处是,分配的数组空间是连续的,像一个真正的二维数组,缺点是用起来不像二维数组,得做下标映射。
3.先分配一组指向数组的指针,然后为每一个指针赋值,使它指向一块分配出来数组。这样做的好处是用起来(语法上)像二维数组,但实际上分配的内存不像二维数组,它不能保证内存是连续的。这种做法delete时要用循环别忘了。
指针数组就是这样呀:
int ** p = new int *[10];
--------------------------------------------------------------------------------------------------------------------------------------------------
//用new创建一个二维数组,有两种方法,是等价的
一:
int (*p)[10] = new int[5][10];
二:
int **p = new int[5];
for(int i=0;i<5;i++)
p[i] = new int[10];
//指针数组的创建,也有两种方法
一:
char *pa = new char[4];
for (int i=0;i<4;i++)
{
pa[i] = new char[8]; //为每个指针都分配8个char元素空间。
}
二:
char *pa[4];//可以不用new创建
for (int i=0;i<4;i++)
{
pa[i] = new char[8]; //为每个指针都分配8个char元素空间。
}
//delete二维数组
for(int i=0; i<5; ++i)
delete [] p[i];
delete []p;
//delete指针数组
一:
for(int i=0; i<4; ++i)
delete [] pa[i];
delete []pa;
二:
for(int i=0; i<4; ++i)
delete [] pa[i];
---------------------------------------------------------------------------------------------------------------------------------------------------------------