现在的位置: 首页 > 综合 > 正文

C++中二维数组的动态分配

2014年02月01日 ⁄ 综合 ⁄ 共 1305字 ⁄ 字号 评论关闭
C++中二维数组的动态分配
作者:   来源:csdn博客   发布者:admin
时间:2009-04-23 13:55:03   点击:115

C++中一维数组的动态分配十分常用,但C++初学者可能很少想过要使用动态分配的二维数组,或者自认为二维数组就是这样分配的(至少我自己开始的时候就这样认为):int m=2, n=3; int** array2D=new int[m][n];。这完全是我们写多了像int n=4; int* array=new int[n];这样的语句留下的后遗症,纯粹是因为惯性太大刹都刹不住,就像某同学学完“一二三”要写“万”一样。

事实往往不是这么简单,看下面的正确方法就知道了:
#include <iostream>
using std::cout;
using std::endl;
int main() {
 int i, j;
 int m=2, n=3;

 //分配行指针数组
 int** array2D=new int*[m];

 //为每一行分配空间
 for(i=0; i<m; ++i) {
  array2D[i]=new int[n];
 }

 //可以稍微测试一下
 for(i=0; i<m; ++i) {
  for(j=0; j<n; ++j) {
   array2D[i][j]=i+j;
  }
 }
 for(i=0; i<m; ++i) {
  for(j=0; j<n; ++j) {
   cout<<array2D[i][j]<<"/t";
  }
  cout<<endl;
 }

 //删除每一行分配的空间
 for(i=0; i<m; ++i) {
  delete[] array2D[i];
 }

 //删除行指针数组
 delete[] array2D;
 
 return EXIT_SUCCESS;
}

 

利用C++二维数组动态分配的特点,我们还可以分配出用静态数组无法实现的不等长二维数组,想要多少就分配多少。看下面的例子:
#include <iostream>
using std::cin;
using std::cout;
using std::endl;
int main() {
 int i, j;
 int m=3;
 int n[3]={1, 2, 3};

 //行指针数组
 int** array2D=new int*[m];
 
 //每行分配不一样多的空间
 for(i=0; i<m; ++i) {
  array2D[i]=new int[n[i]];
 }

 //测试一下
 for(i=0; i<m; ++i) {
  for(j=0; j<n[i]; ++j) {
   array2D[i][j]=j+1;
  }
 }
 for(i=0; i<m; ++i) {
  for(j=0; j<n[i]; ++j) {
   cout<<array2D[i][j]<<"/t";
  }
  cout<<endl;
 }
 
 //删除分配的空间
 for(i=0; i<m; ++i) {
  delete[] array2D[i];
 }
 delete[] array2D;
 
 return EXIT_SUCCESS;
}

 

当然,如果你想一劳永逸,不想这么麻烦的分配来分配去,那么去写个类模板吧,在类模板中重载数组下标运算符,你就可以像使用静态数组一样使用你的类了。

抱歉!评论已关闭.