本文基于《数据结构、算法与利用 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
参考列表
- 《数据结构、算法与利用 C++语言形容》P11, 12