本文基于《数据结构、算法与利用 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 00 0 1 00 0 0 0

参考列表

  1. 《数据结构、算法与利用 C++语言形容》P11, 12