C++ - new delete 高维数组小结
借鉴:http://www.cnblogs.com/beyondstorm/archive/2008/08/26/1276278.html
http://www.cnblogs.com/platero/archive/2010/12/18/1910057.html
高维数组的动态申请和释放与二维数组的类似,所以这里只演示的是二维数组的动态申请和释放。
先来个大众版的:
#include <iostream> using namespace std; int main(void)
{
int **p; p = new int*[]; for (int i = ; i < ; i++)
p[i] = new int[]; for (int i = ; i < ; i++) {
for (int j = ; j < ; j++)
p[i][j] = i+j;
} for (int i = ; i < ; i++)
delete []p[i]; delete []p; return ;
}
然后是各种new:
1.
A (*ga)[n] = new A[m][n];
...
delete []ga;
缺点:n必须是已知
优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)
2. A** ga = new A*[m];
for(int i = 0; i < m; i++)
ga[i] = new A[n];
...
for(int i = 0; i < m; i++)
delete []ga[i];
delete []ga;
缺点:非连续储存,程序烦琐,ga为A**类型
优点:调用直观,n可以不是已知
3. A* ga = new A[m*n];
...
delete []ga;
缺点:调用不够直观
优点:连续储存,n可以不是已知
4. vector> ga;
ga.resize(m); //这三行可用可不用
for(int i = 1; i < n; i++) //
ga[i].resize(n); //
...
缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大)
优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长
5. vectorga;
ga.resize(m*n);
方法3,4的结合
6. 2的改进版
A** ga = new A*[m];
ga[0] = new A[m*n];
for(int i = 1; i < m; i++)
ga[i] = ga[i-1]+n;
优点:连续存储,n可以不是已知,析构方便,猜想只需delete [] ga;
问题:
1.怎么进行多维数组的声明和初始化?
2.是否能够动态分配多维数组,怎么样正确析构?
3.怎么理解这些操作?
最新文章
- Mybatis入门DEMO
- C语言 &#183; 未名湖边的烦恼
- Linux 守护进程三
- JavaWeb学习笔记——JavaBean的保存范围和删除
- 与你相遇好幸运,Tippecanoe在Centos下の安装
- Nginx reopen reload作用及工作过程
- Linq to sql-存储过程
- hdu1251在词典里统计前缀出现的个数
- BZOJ3488 : [ONTAK2010]Highways
- javaWEB中的HttpServlet(企业开发使用)
- c++中两种常量方法的比较
- HDU1431+简单题
- hdoj 3635 Dragon Balls【并查集求节点转移次数+节点数+某点根节点】
- GitLab实战操作指南
- JS 判断两个时间的大小(可自由选择精确度:天,小时,分钟,秒)
- Xamarin Essentials教程地理定位Geolocation
- linux——系统内核参数优化
- Mysql计算并保留两位小数
- vuex简介(转载)
- java基本数据类型与封装类型详解(int和Integer区别)
热门文章
- bzoj 1619: [Usaco2008 Nov]Guarding the Farm 保卫牧场【bfs】
- 【BZOJ2525】[Poi2011]Dynamite(二分,树形dp)
- Pycharm初始创建项目和环境搭建(解决aconda库文件引入不全等问题)
- RT-Thread 设备驱动-硬件定时器浅析与使用
- ACM_01背包(恰好装满)
- Android 你知道界面布局嵌套多少层之后会Crash吗
- Sonar 规则
- httponlycookie
- 网站卡测试用 PageSpeed Insights
- (独孤九剑)--cURL