动态创建二维数组

本文基于《数据结构、算法与应用 C++语言描述》一书。

创建二维数组

template
void make2dArray(T ** &a, int numberOfRows, int numberOfColumns)
{
    // 创建行指针
    a = new T * [numberOfRows];

    // 为每一行分配空间
    for(int i = 0; i < numberOfRows; i++)
        a[i] = new T[numberOfColumns];
}

删除二维数组

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

完整代码

#include 

using namespace std;

/*
    创建二维数组
*/
template
void make2dArray(T ** &a, int numberOfRows, int numberOfColumns)
{
    // 创建行指针
    a = new T * [numberOfRows];

    // 为每一行分配空间
    for(int i = 0; i < numberOfRows; i++)
        a[i] = new T[numberOfColumns];
}

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

/*
    初始化数组为全0
*/
template
void initArray(T ** &a, int numberOfRows, int numberOfColumns)
{
    for(int i = 0; i < numberOfRows; i++)
        for(int j = 0; j < numberOfColumns; j++)
            a[i][j] = 0;
}

/*
    打印数组内容
*/
template
void printArray(T ** &a, int numberOfRows, int numberOfColumns)
{
    for(int i = 0; i < numberOfRows; i++) {
        for(int j = 0; j < numberOfColumns; j++)
            cout << a[i][j] << " ";
        cout << "\n";
    }
}

int main()
{
    int **a;

    try {
        int rows, columns;

        rows = 3;
        columns = 4;

        make2dArray(a, rows, columns);
        initArray(a, rows, columns);
        a[1][2] = 1;
        printArray(a, rows, columns);
        delete2dArray(a, rows);
    } catch(bad_alloc &e) {
        cerr << "Could not create two-dimensional array a\n";
        cerr << "bad_alloc capture: " << e.what() << "\n";
    }

    system("pause");
    return 0;
}

结果

0 0 0 0
0 0 1 0
0 0 0 0

参考列表

  1. 《数据结构、算法与应用 C++语言描述》P11, 12

你可能感兴趣的:(c++)