C++中二维数组的动态分配
时间: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++中二维数组的动态分配相关推荐
- C与C++中二维数组的动态分配内存方法
最近一直被二维数组的动态内存分配和赋值搞得有点昏,还是记下来,供以后查看. 一.C++中动态分配与释放二维数组 1.二维都未知 #include <iostream>using names ...
- c语言动态的申请矩阵存储空间,C语言中二维数组如何申请动态分配内存
C语言中二维数组如何申请动态分配内存: 使用malloc函数,先分配第一维的大小,然后再循环分配每一维的大小 #include #include int main() { int **a; int i ...
- C/C++中二维数组作函数形参时,调用函数时,可传递的实参类型的小结
转自:http://blog.163.com/tianhit@yeah/blog/static/165747821201052195212719/ #include<iostream> u ...
- Java中二维数组的用法(不定长二维数组)
Java中二维数组的用法(不定长二维数组),即每个第二维的数组长度不一样. 1>代码如下: package com.demo.test;public class Test {public Tes ...
- php二维数组取交集,PHP中二维数组怎么取交集
PHP中二维数组取交集的方法:首先循环其中一个数组:然后使用in_array()函数判断被循环数组的每个元素是否在另外一个数组中:最后输出$out_arr即可. PHP二维数组怎么取交集? 思路,循环 ...
- java中二维数组的长度
java中二维数组的长度 public class Solution {public boolean Find(int target, int [][] array) {for(int i=0;i&l ...
- C#中二维数组的二维长度
C#中二维数组的二维长度 二维数组的长度 int row = Arr.GetLength(0); //第一维的长度(即行数)int col = Arr.GetLength(1); //第二维的长度(即 ...
- Java中二维数组的动态初始化
java中二维数组的动态初始化: 使用new关键字实例化,并且指定一个维度. 什么是一个维度,显式维度,或者隐式维度. 而不是直接等于{{"hello", "world& ...
- C/C++中二维数组作为函数参数------方法及要点讲解
** 1,形参给出第二维的长度. ** C/C++中二维数组作为函数参数 的时候,可以不写行号,但是一定要写明列号(一定注意,一定注意,一定注意!). int array[3][3]; 函数声明:vo ...
- 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 ...
最新文章
- 时序分析中的关键术语
- SharedPreference.Editor的 apply 和commit 方法异同
- vue+Element-ui实现分页效果
- java date加一天_Java日期时间API系列15-----Jdk8中API类,java日期计算2,年月日时分秒的加减等...
- go语言基础之格式化输出
- 100+诡异的数据集,20万Eclipse Bug、死囚遗言等
- python类与方法与函数_Python 中的函数与类的方法
- 【原】公司P2P平台的功能拆分
- 【语音去噪】基于matlab GUI谱减法+维纳滤波语音去噪(带面板+信噪比)【含Matlab源码 1661期】
- 中国移动 招聘 php,中国移动开启社招,这真的是机会?移动员工:携网转号累死你...
- Black-Scholes期权定价模型
- 选对了裤长,胜过任何一件高级定制
- python画成绩正态分布图_R统计学(09): 正态分布 (二)
- 给ssh服务添加谷歌双重认证
- Photoshop技术学习有感
- elementUI el-upload传额外的参数
- 使用Jmeter输出错误响应结果到日志
- ubuntu12.04 rythonbox不支持mms电台
- 编译android版本binutils工具
- java利用FFMpeg将mp4转换为gif