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

C++中二维数组的动态分配作者:   来源:csdn博客   发布者:admin

时间:2009-04-23 13:55:03   点击:616 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;

}

 

 

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值