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.怎么理解这些操作?
C++ - new delete 高维数组小结的更多相关文章
- matlab学习笔记11_3高维数组操作 filp, shiftdim, size, permute, ipermute
一起来学matlab-matlab学习笔记11 11_3 高维数组处理和运算 filp, shiftdim, size, permute, ipermute 觉得有用的话,欢迎一起讨论相互学习~Fol ...
- matlab学习笔记11_2高维数组操作 squeeze,ind2sub, sub2ind
一起来学matlab-matlab学习笔记11 11_2 高维数组处理和运算 squeeze, ind2sub, sub2ind 觉得有用的话,欢迎一起讨论相互学习~Follow Me squeeze ...
- delete和Vue.$delete删除数组的区别
delete delete只是被删除的元素变成了 empty/undefined ,其他的元素的键值对应关系还是不变. Vue.$delete 直接删除了数组中元素,数组的键值对应关系发生相应变化 例 ...
- 北京网络赛G BOXES 状态压缩+有序BFS+高维数组判重
#include <bits/stdc++.h> using namespace std; ]; ][]; ][][]; ][][][]; ][][][][]; ][][][][][]; ...
- js数组小结
1.js数组使用sort()排序 var a = ["1","12","3","4","0"]; d ...
- Scala数组小结
1.定长数组 定长数组:指长度不可变的数组Array. 第一种方式: 先声明一个数组,后初始化该数组: scala> val array = new Array[Double](5) array ...
- JavaScript之Array/数组小结
MDN-Array的属性/方法:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Arr ...
- 1.7 js基础,字符串、数组小结
一.arguments 实参参数的数组 实参[实际的值],形参[形式上的参数] 当参数个数不固定的时候使用. 示例: script> var g ...
- HDU 1166 敌兵布阵 树状数组小结(更新)
树状数组(Binary Indexed Tree(BIT), Fenwick Tree) 是一个查询和修改复杂度都为log(n)的数据结构.主要用于查询任意两位之间的所有 元素之和,但是每次只能修改一 ...
随机推荐
- 10.17NOIP模拟赛
#include<iostream> #include<cstdio> #include<cstring> #define N 1001 using namespa ...
- P3626 [APIO2009]会议中心
传送门 好迷的思路-- 首先,如果只有第一问就是个贪心,排个序就行了 对于第二问,我们考虑这样的一种构造方式,每一次都判断加入一个区间是否会使答案变差,如果不会的话就将他加入别问我正确性我不会证 我们 ...
- ACM_01背包2
背包4 Time Limit: 2000/1000ms (Java/Others) Problem Description: 有n个重量和价值分别为Wi,Vi的物品,现从这些物品中挑选出总量不超过W的 ...
- 创建 pulic dblink 使不同的用户可以访问dblink
1. system: grant create public database link to ivrsdata; 2.userdate: tnsnames.ora config db connect ...
- Floating-point exception
Floating-point exception 同一个程序在一台高版本Linux上运行时没有问题,而在另一台低版本机器上运行报Floating Point Exception时,那么这极有可能是由高 ...
- 可滚动的ResultSet类型 实现分页
可滚动的ResultSet类型. 这个类型支持前后滚动取得纪录next().previous(),回到第一行first(),同时还支持要取的 ResultSet中的第几行 absolute(int n ...
- redhat之数据挖掘R语言软件及rstudio-server服务的安装
安装时间:2015年8月25日 22:55:35 作者:luomg 软件:R.Rstudio-server 环境:redhat6.2 联系:luomgf@163.com 声明:如果你有遇到安装中的问题 ...
- (转)Hibernate框架基础——映射主键属性
http://blog.csdn.net/yerenyuan_pku/article/details/52740744 本文我们学习映射文件中的主键属性,废话不多说,直接开干. 我们首先在cn.itc ...
- HDU_1021_费布拉切变形
Fibonacci Again Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)T ...
- codeforces_300C_组合数_快速幂
C. Beautiful Numbers time limit per test 2 seconds memory limit per test 256 megabytes input standar ...