设为首页 加入收藏

TOP

C++二维数组的动态分配
2012-11-17 09:28:54 来源: 作者: 【 】 浏览:442
Tags:二维数 动态 分配

    C++(www.cppentry.com)中动态分配一维数组是十分常见的事,但会分配一维数组的人并不一定会分配二维数组。因为我想,不到特殊情况,我们可能很少想过要使用动态分配的二维数组。但不管怎么样,只要你是第一次想试着去分配一个二维数组的时候,你或多或少的会想当然地认为二维数组一定是像这样分配的:int m=2, n=3; int** array2D=new int[m][n];。这不是我们的错,因为写多了int n=3; int* array=new int[n];这样的语句容易患上后遗症,难免有犯错的时候。

    有些事情并不像看似的那样简单,就像这里的动态分配二维数组,看下面的程序:

    #include <iostream>

    using std::cout;

    using std::endl;

    int main() {

    int i, j;

    int m=2, n=3;

    //分配行指针数组

    int** array2D=new int*[m];

    //为每一行分配空间

    for(i=0; i<m; ++i) {

    array2D[i]=new int[n];

    }

    //测试一下

    for(i=0; i<m; ++i) {

    for(j=0; j<n; ++j) {

    array2D[i][j]=i+j;

    }

    }

    for(i=0; i<m; ++i) {

    for(j=0; j<n; ++j) {

    cout《array2D[i][j]《"/t";

    }

    cout《endl;

    }

    //删除每一行分配的空间

    for(i=0; i<m; ++i) {

    delete[] array2D[i];

    }

    //删除行指针数组

    delete[] array2D;

    return EXIT_SUCCESS;

    }

    利用C++(www.cppentry.com)二维数组动态分配的特点,我们还可以分配出用静态数组无法实现的不等长二维数组。看下面的例子:

    #include <iostream>

    using std::cin;

    using std::cout;

    using std::endl;

    int main() {

    int i, j;

    int m=3;

    int n ={1, 2, 3};

    //行指针数组

    int** array2D=new int*[m];

    //每行分配不一样多的空间

    for(i=0; i<m; ++i) {

    array2D[i]=new int[n[i]];

    }

    //测试一下

    for(i=0; i<m; ++i) {

    for(j=0; j<n[i]; ++j) {

    array2D[i][j]=j+1;

    }

    }

    for(i=0; i<m; ++i) {

    for(j=0; j<n[i]; ++j) {

    cout《array2D[i][j]《"/t";

    }

    cout《endl;

    }

    //删除分配的空间

    for(i=0; i<m; ++i) {

    delete[] array2D[i];

    }

    delete[] array2D;

    return EXIT_SUCCESS;

    }

    打印的结果是:

    1

    1 2

    1 2 3

    当然,如果你想一劳永逸,不想这么麻烦地分配来分配去,那么去写个类模板吧,在类模板中重载数组下标运算符,你就可以像使用静态二维数组那样方便地使用你的类了。

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇C++中类对象的内存布局和占用空间 下一篇划分树详解 结合例题hdu4251

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: