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++Error2208:...尝试引用已删除的函数
- 【C/C++学院】(2)函数/Lua/数组/恶搞程序(修改桌面背景,播放音乐)
- C++二维数组 取地址 复制给 二维指针
- electron 调用nodejs native c++ addon
- C/C++每日一练(20230421)
- C++字符串相互转换
- atitit.判断时间重叠方法总结 java c++ c#.net js php
- 【C++竞赛 B】yyy的回文数组
- C++:C++编程语言学习之数组/字符串/指针/引用/日期&I/O输入输出操作(I/O 库头文件/标准输出流cout/标准输入流cin/标准错误流/准日志流)的简介、案例应用之详细攻略
- 数组拆分(C++)
- C++QT开发——Xml、Json解析
- 第46篇 QML调用C++ 之 注册法
- 【华为OD机试 2023最新 】 人数最多的站点(C++ 100%)
- 【华为OD机试 2023最新 】计算数组中心位置(C++ 100%)
- 【华为OD机试 2023最新 】优雅子数组(C++ 100%)
- 【华为OD机试 2023】 数组合并(C++ Java JavaScript Python)
- 【 华为OD机试 2023】猜字谜(C++ Java JavaScript Python)
- C++ 十六进制数组转ascii
- C++ string字符串按分隔符分割成一个数组
- C++ std::vector 一维 二维数组 初始化为0
- atitit.软件开发GUI 布局管理优缺点总结java swing wpf web html c++ qt php asp.net winform
- c++ 新建一个数组
- C++使用json二维数组格式读写二进制文件(十七)
- C++使用using与typedef定义别名(十三)
- 【跟学C++】C++STL标准模板库——算法详细整理(上)(Study18)
- 【跟学C++】C/C++必学知识——指针【番外2】
- C++使用技巧(二十四):回顾vector用法及多维数组使用
- 常见的C++软件异常场景分析与总结