本文基于《数据结构、算法与应用 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
参考列表
- 《数据结构、算法与应用 C++语言描述》P11, 12
推荐阅读
- 个人日记|K8s中Pod生命周期和重启策略
- 学习分享|【C语言函数基础】
- C++|C++浇水装置问题
- 数据结构|C++技巧(用class类实现链表)
- C++|从零开始学C++之基本知识
- 步履拾级杂记|VS2019的各种使用问题及解决方法
- leetcode题解|leetcode#106. 从中序与后序遍历序列构造二叉树
- 动态规划|暴力递归经典问题
- 麦克算法|4指针与队列
- 遇见蓝桥遇见你|小唐开始刷蓝桥(一)2020年第十一届C/C++ B组第二场蓝桥杯省赛真题