动态创建二维数组

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

    推荐阅读