zoukankan      html  css  js  c++  java
  • 转载:C++ 二维数组new

    来源: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;

  • 相关阅读:
    java代码中存在的Big Endian 和 Little Endian
    通过hbase实现日志的转存(MR AnalyserLogDataRunner和AnalyserLogDataMapper)
    hbase使用MapReduce操作1(基本增删改查)
    配置好Nginx后,通过flume收集日志到hdfs(记得生成本地log时,不要生成一个文件,)
    数据库分页查询
    将博客搬至CSDN
    Dev Winform本地化
    C#,OleDbType,Access 对应数据类型
    C#字符串转义和反转义
    C# 正则表达式
  • 原文地址:https://www.cnblogs.com/yinwei-space/p/5797946.html
Copyright © 2011-2022 走看看