您的位置:首页 > 编程语言 > C语言/C++

C++动态申请列数行数不确定的数组

2015-09-15 19:59 211 查看
今天在学习Sartaj Sahni写的《数据结构、算法与应用》一书中看到自己很喜欢的部分——动态申请行数列数不确定的数组。

在C++中解决的方法其实很简单,我们需要把这个二维数组看成是若干行所组成的结构。什么意思呢?也就是说每一行都是动态的,然后把它们整合在一起不就是二维动态了么?

所以,我们得到了如下的十分给力的设想:



那么,加上一些简单的异常捕获、空间释放,我们就可以得到一个适应性比较好的函数了,请看这段简易的代码:

[code]#include<iostream>
using namespace std;

template <class T>
bool make2dArray(T** &x, int numberOfRows, int numberOfColumns)
{

        x = new T*[numberOfRows];
        for (int i = 0; i < numberOfRows; i++)
        {
            x[i] = new T[numberOfColumns];
        }
        return true;
}

template <class T>
void delete2dArray(T** &x, int numberOfRows)
{
    //删除行数组空间
    for (int i = 0; i < numberOfRows; i++)
    {
        delete [] x[i];
    }
    //删除行指针
    delete[]x;
    x = NULL;
}

int main()
{
    try{
        int **x;
        int r;
        int c;
        cout << "Please input r ";
        cin >> r;
        cout << endl;
        cout << "Please input c";
        cin >> c;
        cout << endl;
        make2dArray(x, r, c);
        delete2dArray(x, r);
    }
    catch (bad_alloc)
    {
        cerr << "Could not create x" << endl;
        exit(1);
    }

    return 0;
}


函数模板确实是个好东西,它可以让我们赶走重复书写那满满的恶意。无论在其它语言中我们应该如何实现行列数不确定的动态的二维数组,我们都可以从这个小例子中获得启发:

复杂的问题经过分解会变得容易处理

模拟或者说自己创造出所需要的数据结构是一种需要持续锻炼的能力

在动态申请之后及时进行delete处理,也就是对回收机制应该不断进行研究。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: