关于c++:动态创建二维数组

71次阅读

共计 1388 个字符,预计需要花费 4 分钟才能阅读完成。

本文基于《数据结构、算法与利用 C++ 语言形容》一书。

创立二维数组

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

残缺代码

#include <iostream>

using namespace std;

/*
    创立二维数组
*/
template<class T>
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<class T>
void delete2dArray(T ** &a, int numberOfRows)
{
    // 删除行数组空间
    for(int i = 0; i < numberOfRows; i++)
        delete [] a[i];
    
    // 删除行指针
    delete [] a;
    a = NULL;
}

/*
    初始化数组为全 0
*/
template<class T>
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<class T>
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

正文完
 0