Saturday, December 06, 2008

C++动态分配和释放多维数组

假设需要一个A x B x C的三维数组

方法1
分配:
int *** a = new int ** [A];
for(int i = 0; i < A; ++i){
a[i] = new int * [B];
for(int j = 0; j < B; ++j)
a[i][j] = new int[C];
}

释放:
for(int i = 0; i < A; ++i){
for(int j = 0; j < B; ++j)
delete [] (a[i][j]);
delete []a[i];
}
delete [] a;
a = NULL;

方法2
分配:
int (*a)[B][C] = new int [A][B][C];
释放:
delete [] a;
a = NULL;

C中方法类似

简单时间测试:
方法2更快
原因:malloc和 new操作的时间开销大,其开销以调用次数为主要衡量标准

0 Comments: