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

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

C++中二维数组的动态分配相关推荐

  1. C与C++中二维数组的动态分配内存方法

    最近一直被二维数组的动态内存分配和赋值搞得有点昏,还是记下来,供以后查看. 一.C++中动态分配与释放二维数组 1.二维都未知 #include <iostream>using names ...

  2. c语言动态的申请矩阵存储空间,C语言中二维数组如何申请动态分配内存

    C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include #include int main() { int **a; int i ...

  3. C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结

    转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/ #include<iostream> u ...

  4. Java中二维数组的用法(不定长二维数组)

    Java中二维数组的用法(不定长二维数组),即每个第二维的数组长度不一样. 1>代码如下: package com.demo.test;public class Test {public Tes ...

  5. php二维数组取交集,PHP中二维数组怎么取交集

    PHP中二维数组取交集的方法:首先循环其中一个数组:然后使用in_array()函数判断被循环数组的每个元素是否在另外一个数组中:最后输出$out_arr即可. PHP二维数组怎么取交集? 思路,循环 ...

  6. java中二维数组的长度

    java中二维数组的长度 public class Solution {public boolean Find(int target, int [][] array) {for(int i=0;i&l ...

  7. C#中二维数组的二维长度

    C#中二维数组的二维长度 二维数组的长度 int row = Arr.GetLength(0); //第一维的长度(即行数)int col = Arr.GetLength(1); //第二维的长度(即 ...

  8. Java中二维数组的动态初始化

    java中二维数组的动态初始化: 使用new关键字实例化,并且指定一个维度. 什么是一个维度,显式维度,或者隐式维度. 而不是直接等于{{"hello", "world& ...

  9. C/C++中二维数组作为函数参数------方法及要点讲解

    ** 1,形参给出第二维的长度. ** C/C++中二维数组作为函数参数 的时候,可以不写行号,但是一定要写明列号(一定注意,一定注意,一定注意!). int array[3][3]; 函数声明:vo ...

  10. python二维数组表示_python中二维数组中的数如何表达

    python二维数组如何挑选出一定范围的数值? 比如说有一个二维数组 13.1 13.2 13.3 13.4 15.5 15.0 45.2 22.3 22.3 3 [j for i in a for ...

最新文章

  1. 时序分析中的关键术语
  2. SharedPreference.Editor的 apply 和commit 方法异同
  3. vue+Element-ui实现分页效果
  4. java date加一天_Java日期时间API系列15-----Jdk8中API类,java日期计算2,年月日时分秒的加减等...
  5. go语言基础之格式化输出
  6. 100+诡异的数据集,20万Eclipse Bug、死囚遗言等
  7. python类与方法与函数_Python 中的函数与类的方法
  8. 【原】公司P2P平台的功能拆分
  9. 【语音去噪】基于matlab GUI谱减法+维纳滤波语音去噪(带面板+信噪比)【含Matlab源码 1661期】
  10. 中国移动 招聘 php,中国移动开启社招,这真的是机会?移动员工:携网转号累死你...
  11. Black-Scholes期权定价模型
  12. 选对了裤长,胜过任何一件高级定制
  13. python画成绩正态分布图_R统计学(09): 正态分布 (二)
  14. 给ssh服务添加谷歌双重认证
  15. Photoshop技术学习有感
  16. elementUI el-upload传额外的参数
  17. 使用Jmeter输出错误响应结果到日志
  18. ubuntu12.04 rythonbox不支持mms电台
  19. 编译android版本binutils工具
  20. java利用FFMpeg将mp4转换为gif

热门文章

  1. JavaScript数组-多维数组的困惑
  2. 下载SAP标准教程的方法
  3. 062 函数进阶小结
  4. ASP.NET MVC 5 笔记
  5. 不要着急改代码,先想想--centos 6.8下编译安装tmux
  6. Spring+Quartz 整合二:调度管理与定时任务分离
  7. 文本输入框的两种div+css的写法
  8. HDU 3622 Bomb Game
  9. Android Hessian 通信
  10. 译 - Cassandra 数据建模的基本规则