借鉴: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.怎么理解这些操作?

C++ - new delete 高维数组小结的更多相关文章

  1. matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute

    一起来学matlab-matlab学习笔记11 11_3 高维数组处理和运算 filp, shiftdim, size, permute, ipermute 觉得有用的话,欢迎一起讨论相互学习~Fol ...

  2. matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind

    一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind 觉得有用的话,欢迎一起讨论相互学习~Follow Me squeeze ...

  3. delete和Vue.$delete删除数组的区别

    delete delete只是被删除的元素变成了 empty/undefined ,其他的元素的键值对应关系还是不变. Vue.$delete 直接删除了数组中元素,数组的键值对应关系发生相应变化 例 ...

  4. 北京网络赛G BOXES 状态压缩+有序BFS+高维数组判重

    #include <bits/stdc++.h> using namespace std; ]; ][]; ][][]; ][][][]; ][][][][]; ][][][][][]; ...

  5. js数组小结

    1.js数组使用sort()排序 var a = ["1","12","3","4","0"]; d ...

  6. Scala数组小结

    1.定长数组 定长数组:指长度不可变的数组Array. 第一种方式: 先声明一个数组,后初始化该数组: scala> val array = new Array[Double](5) array ...

  7. JavaScript之Array/数组小结

    MDN-Array的属性/方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Arr ...

  8. 1.7 js基础,字符串、数组小结

    一.arguments  实参参数的数组         实参[实际的值],形参[形式上的参数]         当参数个数不固定的时候使用.         示例: script> var g ...

  9. HDU 1166 敌兵布阵 树状数组小结(更新)

    树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...

随机推荐

  1. mycat查表报错Invalid DataSource:0解决方法

    报错时机 登录没问题 use库没问题 select任意一张表均报错 报错信息 mysql> select * from mydb.tb_user; ERROR 3009 (HY000): jav ...

  2. ASP.NET 知识点总结(七)

    1.new修饰符是起什么作用new 修饰符用于声明类或类的成员,表示隐藏了基类中同名的成员.而new 操作符用于实例化一个类型new 修饰符只能用于继承类,一般用于弥补基类设计的不足new 修饰符和 ...

  3. log4j建立propertie后要建立log4j2.xml

    log4j.properties ### \u8BBE\u7F6E### log4j.rootLogger = debug,stdout,D,E ### \u8F93\u51FA\u4FE1\u606 ...

  4. eclipse中添加maven

    收藏一下,一篇很好的例子 maven相关插件:链接:http://pan.baidu.com/s/1i3Ks95j 密码:7pgh eclipse:链接:http://pan.baidu.com/s/ ...

  5. 动态设置缩放比例和html字体大小

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="UTF-8& ...

  6. Codeforces_768_D_(概率dp)

    D. Jon and Orbs time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...

  7. Day 14B 网络应用开发

    网络应用开发 发送电子邮件 在即时通信软件如此发达的今天,电子邮件仍然是互联网上使用最为广泛的应用之一,公司向应聘者发出录用通知.网站向用户发送一个激活账号的链接.银行向客户推广它们的理财产品等几乎都 ...

  8. react antD 日期选择

    <DatePicker disabledDate={disabledDate} onChange={this.onChange} /> //创建时间禁用大于当前时间 <moment( ...

  9. 【Js 文件】 相关

    防止浏览器缓存 <script src="/js/common.js?t=<%=DateTime.Now.ToFileTime().ToString()%>>&quo ...

  10. 带返回值的线程Callable