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;
}

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

最新文章

  1. C++重载流运算符,将存储结构体的vector直接写入文件
  2. js Dialog 去掉右上角的X关闭功能
  3. body-content取值的意义
  4. UVa 1103 (利用连通块来判断字符) Ancient Messages
  5. Java基础知识强化61:经典查找之 常见查找算法小结
  6. 【转】char *str 和 char str[]的区别
  7. use zlib lib to compress or decompress file
  8. HDU - 1407 打表
  9. 2.5配置的框架浅析「深入浅出ASP.NET Core系列」
  10. java 打印空心菱形的两种实现
  11. fastreport窗口重置(适用于属性、数据等窗口显示不出来)
  12. JVM加载类冲突,导致Mybatis查数据库返回NULL的一个小问题
  13. jQuery应用实例4:下拉列表
  14. [No0000115]打开Excel2016提示内存或磁盘空间不足的解决方法
  15. vue2.x 父组件监听子组件事件并传回信息
  16. 对List数组进行排序 Collections.sort(param1,param2)
  17. linux下给php安装memcached及memcache扩展(转)
  18. django restframework 简单总结
  19. 微信小程序组件 自定义多选
  20. 【uoj#213】[UNR #1]争夺圣杯 单调栈+差分

热门文章

  1. PHP将对象转换成数组的方法(兼容多维数组类型)
  2. 推荐 远程部署 fabric
  3. USACO 5.5 Twofive
  4. python 字符串截断
  5. Ubuntu16.04下Hive的安装与配置
  6. Git 简史
  7. spring websocket集群问题的简单记录
  8. JAVAEE——宜立方商城13:订单系统实现、订单生成、Mycat数据库分片
  9. python opencv3 摄像头人脸检测
  10. 机器学习之路: python 回归树 DecisionTreeRegressor 预测波士顿房价