精华内容
下载资源
问答
  • C++维数组new几种应用方法点评

    千次阅读 2013-11-03 13:10:28
    为大家总结几种C++维数组new的常用方法,并对此进行详细的点评,让大家充分了解其中的优缺点。 C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里...

    为大家总结几种C++二维数组new的常用方法,并对此进行详细的点评,让大家充分了解其中的优缺点。

    C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里我们将会总结几种C++二维数组new的应用方式,来进行逐一的点评。


    C++二维数组new应用方式一:

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

    2.  ...   

    3.  delete []ga;  

    缺点:n必须是已知

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


    C++二维数组new应用方式二:

    1.  A** ga = new A*[m];  

    2.  for(int i = 0; i < m; i++)   

    3.  ga[i] = new A[n];   

    4.  ...   

    5.  for(int i = 0; i < m; i++)   

    6.  delete []ga[i];   

    7.  delete []ga;  

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

    优点:调用直观,n可以不是已知


    C++二维数组new应用方式三:

    1.  A* ga = new A[m*n];  

    2.  ...   

    3.  delete []ga;  

    缺点:调用不够直观

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


    C++二维数组new应用方式四:

    1.  vector > ga;   

    2.  ga.resize(m); //这三行可用可不用   

    3.  for(int i = 1; i < n; i++) //   

    4.  ga[i].resize(n); //   

    5.  ...  

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

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


    C++二维数组new应用方式五:

    1.  vector ga;   

    2.  ga.resize(m*n);  

    方法3,4的结合


    C++二维数组new应用方式六:

    2的改进版

    1. A** ga = new A*[m];  

    2. ga[0] = new A[m*n];   

    3. for(int i = 1; i < m; i++)  

    4. ga[i] = ga[i-1]+n;  

    优点:连续存储,n可以不是已知,析构方便,猜想只需delete [] ga;

     

    展开全文
  • 转载:C++维数组new

    2016-08-23 09:08:00
    C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种...在这里我们将会总结几种C++维数组new的应用方式,来进行逐一的点评。 C++维数组new应用方式一: A(*ga)[n]=newA[m][n]; ... ...

    来源:http://developer.51cto.com/art/201002/183127.htm

    C++编程语言中有一种叫做new的二维数组,它的应用方式比较灵活,可以有多种方法来帮助我们实现一些特定功能。在这里我们将会总结几种C++二维数组new的应用方式,来进行逐一的点评。

    C++二维数组new应用方式一:

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

    缺点:n必须是已知

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

    C++二维数组new应用方式二:

    1. A** ga = new A*[m];   
    2. for(int i = 0; i m; i++)   
    3. ga[i] = new A[n];   
    4. ...   
    5. for(int i = 0; i m; i++)   
    6. delete []ga[i];   
    7. delete []ga;  

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

    优点:调用直观,n可以不是已知

    C++二维数组new应用方式三:

    1. A* ga = new A[m*n];   
    2. ...   
    3. delete []ga;  

    缺点:调用不够直观

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

    C++二维数组new应用方式四:

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

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

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

    C++二维数组new应用方式五:

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

    方法3,4的结合

    C++二维数组new应用方式六:

    2的改进版

    1. A** ga = new A*[m];   
    2. ga[0] = new A[m*n];   
    3. for(int i = 1; i m; i++)   
    4. ga[i] = ga[i-1]+n;  

    优点:连续存储,n可以不是已知,析构方便,猜想只需delete [] ga;

    转载于:https://www.cnblogs.com/yinwei-space/p/5797946.html

    展开全文
  • C++维数组new小结(zz)

    2010-11-27 11:39:00
    C++维数组new小结(zz)   <br /> 1. A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知 优点:调用直观,连续储存,程序简洁(经过测试,析构函数能...
     
    

     


    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. vector ga;
    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;

     

    展开全文
  • 原因是这样的:前几天在用c++写银行家算法的时候,resource类的成员变量有二维数组,开始写的是默认初始化的方式,类似于这种: class A { ... privated: arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}}; } ...

    写在前面:

    今天为什么要把“二维数组”这个概念重新拎出来说一说呢。原因是这样的:前几天在用c++写银行家算法的时候,resource类的成员变量有二维数组,开始写的是默认初始化的方式,类似于这种:

    class A
    {
      ...
     privated:
     arr[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    }
    

    结果报错。所以就想重新写个成员函数用来初始化二维数组,结果没想到这个时候脑子居然乱套了,形参在用一级指针还是二级指针陷入了纠结与痛苦中 ̄□ ̄|| 于是说想写一篇文章,把C语言和c++相关的二维数组需要注意的方方面面都拎出来说一下。一方面也是自己的巩固,另一方面也欢迎大家的补充和指正。

    目录

    1.二维数组的初始化;
    2.二维数组在内存中的存储情况;
    3.二维数组的函数调用方式;
    4.如何动态的申请二维数组;
    5.扩展:三维数组
    

    1.二维数组的初始化
    例如对整型二维数组a[3][2]赋值
    方法一:
    在定义的同时赋值

    int a[3][2]={0};//所有数组元素均为0
    

    方法二:

    int a[3][2]={1,2,3,4,5,6};//常规的赋值方法
    

    方法三:

    int a[3][2]={{1,2},{3,4},{5,6}};//分行的赋值方法
    

    方法四:

    int a[3][2]={{1,2},{0},{3}};//部分赋值方法,第一行元素的值分别为1,2,第二行元素值都是0,第三行第一个元素值为3,第二个元素值为0
    

    方法五:

    int a[3][2];  //先定义
    for(i=0;i<=3;i++)  //用双重for循环赋值,i,j表示二维数组下标
    for(j=0;j<=2;j++)
    scanf("%d",&a[i][j]);
    

    2.二维数组在内存中的存储情况
    在这里插入图片描述
    通过上边的图片,我们应该能够认识到,二维数组arr[3][4]可以这么理解:
    这是一个包含3个元素的一维数组,而这个一维数组的每一个元素又都是一个一维数组.存储方式也类似一维数组:线性存储。

    int [][]arr=new int[3][]; //定义了一个二维数组,该数组里有三个一维数组;
                             //int [][]   是arr的类型
    

    3.二维数组的函数调用方式
    我们知道数组名就等于数组首元素的地址;函数传参的时候,数组会退化为指针;
    类比一维数组的调用:

    
    void init(int *arr,int size)//也可以直接用一维数组接收,数组会
                                 //退化为指针:void init(int arr[],int size)
    {
        int i=0;
        for(i=0;i<size;++i)
        printf("%d",*arr);  //也可以写成 printf("%d",arr[i]);
        
    }
    int main()
    {
      int arr[3]; 
      int size=sizeof(arr)/sizeof(arr[0]);
      init(arr,size);
    }
    
    

    二位数组除了形参用二位数组接收之外,还可以这么写:
    在这里插入图片描述
    在这里插入图片描述
    运行结果:
    在这里插入图片描述
    4.如何动态的申请二维数组的空间
    我们知道一维数组的动态申请:

     int *arr=new int[3];
    

    动态申请一个二位数组:

    //动态申请一个M*N的二维数组
       int **p = new int*[M];
       for (i = 0; i<M; ++i)
    {
        p[i] = new int[N];
    }
    

    5.扩展:三维数组
    类比于二位数组,三维数组arr[2][2][2]我们可以想象有一个一维数组,它每一个元素(一共2个元素,看第一个2)都是一个二位数组;

    static int a[2][2][2]={  { {1,2} , {3,4} }  ,  { {5,6} , {7,8} }  };
    

    分开来讲是这样:先看最高维:把{{1,2} , {3,4}}给a[0], {{5,6} , {7,8}}给a[1]相当于:
    a[0]={{1,2},{3,4}};
    a[1]={{5,6},{7,8}};
    把一个二维的数据赋给二维的变量,现在不难理解了吧。

    展开全文
  • C++维数组new小结(zz)

    2012-10-17 21:14:31
    维数组new小结 1. A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知 优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用) 2. A** ga = new A*[m]; for(int i ...
  • C++维数组new小结

    千次阅读 2012-06-26 15:33:26
    A (*ga)[n] = new A[m][n];  ...  delete []ga;  缺点:n必须是已知  优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)  2. A** ga = new A*[m];  for(int i = 0; i ga[i] = new ...
  • C++中二维数组new小结

    2007-06-13 13:45:00
    维数组new小结 转至水木清华 1. A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知 优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用) 2. A** ga = new A*[m]; for(int i = 0; i ga...
  • 我的问题是:上面的程序deleteArray3函数用于释放三维数组空间,显然这是没有成功释放的,请问该如何使用一个函数释放new空间? 难道只能采用宏定义的方式麽: ``` #define deleteArray3(p3, row, col, cha) \ ...
  • 我想动态申请一个三维数组,但是一定要使得存储的空间连续的,方便管理,不知道各位有什么看法。 有个一二维的例子可以参考: A **ga= new A* [m]; ga[0] = new A [m*n]; for(int i=1;i;++i) { ga[i]=ga[i-...
  • C++中二维数组new小结

    2006-03-12 16:25:00
    维数组new小结转至水木清华1. A (*ga)[n] = new A[m][n]; ... delete []ga;缺点:n必须是已知优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)2.A** ga = new A*[m]; for(int i = 0; i ga[i...
  • C++中二维数组总结

    千次阅读 2016-04-24 09:52:58
    1、C++中二维数组new小结 2、二维数组的动态分配(new)、初始化(memset)和撤销(delete) 3、动态分配内存。。。 4、如何在C/C++中动态分配二维数组 举例: //动态定义一维数组、二维数组、三维数组 #inc
  • 维数组new小结转至水木清华1. A (*ga)[n] = new A[m][n]; ... delete []ga;缺点:n必须是已知优点:调用直观,连续储存,程序简洁(经过测试,析构函数能正确调用)2.A** ga = new A*[m]; for(int i = 0; i ga[i...
  • C++维数组sort排序问题

    万次阅读 多人点赞 2018-02-08 20:08:16
    实验内容:利用二维数组进行“级排序”测试1:使用c++内置的普通型二维数组#include &lt;algorithm&gt; #include &lt;iostream&gt; using namespace std; bool cmp(int a[], int b[]) { ...
  • c++维数组

    2013-10-31 10:26:00
    在这里我们将会总结几种C++维数组new的应用方式,来进行逐一的点评。 C++维数组new应用方式一: A (*ga)[n] = new A[m][n]; ... delete []ga; 缺点:n必须是已知 优点:调用直观,连续储...
  • C++ 三维数组的理解与动态分配

    千次阅读 2013-07-06 17:11:35
    三维数组有点不好理解。很多人认为可以用 数组的数组来进行理解,或者可以用立方体来理解。而我认为可以用 树结构来理解。比如 int array【3】【4】【5】,可以认为从根节点出来,首先有3个一级节点,每个一级节点有...
  • C/C++维数组总结

    万次阅读 多人点赞 2018-12-16 16:01:29
    先说在前面,一般的我们说的C/C++中的二维数组是定义在栈中的二维数组。比如定义了一个array[3][4],那就指的是定义了一个行四列的矩阵形状的二维数组,如下图所示。这样的矩阵在内存中是以箭头右边的方式存放的,...
  • C++三维数组定义和初始化

    千次阅读 2018-01-28 15:58:29
    array35[depth][height] = new int [Width]; } } printf("\nAccess array35 elements:\n"); for(int depth=0; depth; depth++) { printf("depth=%d\n",depth); for(int height=0; height; height++) ...
  • C++维数组的动态创建问题
  • C++维数组的定义及理解

    千次阅读 多人点赞 2020-11-27 17:26:28
    #二维数组的定义方式 #二维数组结构的含义与理解 前言 一维数组对于存储和处理一组数据很有用,但是有时候,很有必要使用多维数组。 例如,在统计学生成绩的程序中,教师可以将一个学生的所有科目考试分数记录在一个...
  • c++定义动态二维数组二维指针vector 推荐使用 vector<vector<int>> array(m, vector<int>n);//定义m行n列二维数组 二维指针 二维数组本身相当于是一维数组下存储指针,可以用new int[m]定义一...
  • 1. 一维数组 对于简单的一维数组动态内存分配和释放,如下: int *array1D;//假定数组长度为m //动态分配空间 array1D = new int [m]; //释放 delete [] array1D; 2. 二维数组维数组的动态分配和释放 //...
  • new创建多维数组时,最后需要用delete,但是我在delete时遇到了麻烦,实在不能再浪费时间了,先mark一下,至少创建多维数组这段是对的 以int型数组为例,我们知道 ...三维数组 int c[2][3][4] = {

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 28,059
精华内容 11,223
关键字:

c++三维数组new

c++ 订阅