new二维数组的几种方法

(1)可以直接[][]访问。但是内存不连续,不是很推荐使用,除非m\n都不确定

A** ga = new A*[m];//第一维,m为行数(数组[m]内存类型为A的指针)
for(int i=0;i<m;++i)
{
    ga[i] = new A[n]; //分配第二维,每一行的空间。(ga[i]为指针,指向数组A[n])

}
...
for(int i=0;i<m;++i)
{
    delete []ga[i];
}
delete []ga;

缺点:非连续储存,程序烦琐,ga为A**类型

优点:调用直观,n可以不是已知 (列数可以不确定)

(2)内存不连续,可以[][],是第一种情况的特例,局限性比较大,比第一种好在能直接delete,方便

如果你确实知道n是多少,那么可以用这种,比如说二维数组做形参的时候(此时内存连续),不是很推荐使用

A (*ga)[n] = new A[m][n];  
...  
delete []ga;

缺点:n必须是已知

优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)

(3)一维数组方式:

A* ga = new A[m*n];
// ga[i*n+j]是ga[i][j]
...   
delete []ga;

缺点:调用不够直观

优点:连续储存,n可以不是已知

(4)

vector > ga;   
ga.resize(m); //这三行可用可不用   
for(int i = 1; i < n; ++i) //   
ga[i].resize(n); //   
...

缺点:非连续储存,调试不够方便,编译速度下降,程序膨胀(实际速度差别不大)

优点:调用直观,自动析构与释放内存,可以调用stl相关函数,动态增长

(5)

vector ga;   
ga.resize(m*n);

方法3,4的结合

(6)

1的改进版

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;

时间: 2024-10-10 16:30:16

new二维数组的几种方法的相关文章

使用malloc分配二维数组的两种方法

方法一: #include <malloc.h> #include <stdio.h> int main() { int **a = malloc(sizeof(int)*3); a[0]= malloc(sizeof(int)*2); a[1]= malloc(sizeof(int)*2); a[2]= malloc(sizeof(int)*2); a[0][0] =1; a[0][1] =2; a[1][0] =3; a[1][1] = 4; a[2][0] =5; a[2][

PHP生成带logo图像二维码的两种方法

本文主要和大家分享PHP生成带logo图像二维码的两种方法,主要以文字和代码的形式和大家分享,希望能帮助到大家. 一.利用Google API生成二维码Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 $urlToEncode="http://www.php.cn"; generateQRfromGoogle($urlToEncode); /**

C/C++上二维数组的两种动态分配内存方法

最近在看一个程序的源代码的时候了解到了二维数组的动态分配空间以及释放的方法,在此记录. 一.二维数据的内存空间动态分配 方法一: void malloc2D_1(int **&a) { a = new int*[xDim]; for(int i=0;i<xDim;i++) a[i] = new int[yDim]; assert(a!=NULL); } int main() { int **arr = NULL; malloc2D_1(arr); } 首先arr是一个二级指针,为arr分配x

二维数组和函数以及方法

二维数组,for each的运用,方法的定义.特点.结构. 昨天做的ATM转换成函数型代码

java定义二维数组的几种写法

//定义二维数组写法1 class numthree{              public static void main(String[] args)    {              float[][] numthree;//定义一个float类型的2维数组              numthree=new float[5][5];//为它分配5行5列的空间大小 numthree[0][0]=1.1f;//通过下标索引去访问1行1列=1.1              numthre

php生成二维码的两种方法(转)

生成二维码程序在网上可以找到很多我们发现像google,还有一些国外站都提供了免费生成二维码的插件或api了,下面我来给大家介绍几种. 最简单最实例的goolge开源方法 1.google开放api 代码如下: $urlToEncode="http://gz.altmi.com";   generateQRfromGoogle($urlToEncode);   function generateQRfromGoogle($chl,$widhtHeight ='150',$EC_leve

微信支付支付宝支付生成二维码的方法(php生成二维码的三种方法)

如果图简单,可以用在线生成 http://pan.baidu.com/share/qrcode?w=150&h=150&url=http://www.xinzhenkj.com 最简单最实例的goolge开源方法 1.google开放api 代码如下: [php] view plain copy <span style="font-size:14px;">$urlToEncode="http://www.helloweba.com"; g

使用PHP生成二维码的两种方法(带logo图像)

一.利用Google API生成二维码 Google提供了较为完善的二维码生成接口,调用API接口很简单,以下是调用代码: $urlToEncode="http://www.jb51.net"; generateQRfromGoogle($urlToEncode); /** * google api 二维码生成[QRcode可以存储最多4296个字母数字类型的任意文本,具体可以查看二维码数据格式] * @param string $chl 二维码包含的信息,可以是数字.字符.二进制信息

c++ 用new创建二维数组~创建指针数组【转】

#include <iostream> using namespace std; void main() { //用new创建一个二维数组,有两种方法,是等价的 //一: int (*p)[10] = new int[5][10]; //二: int **p = new int* [5]; for(int i=0;i <5;i++) p[i] = new int[10]; //指针数组的创建,也有两种方法 //一: char **pa = new char* [4]; for (int