介绍
本文主要介绍使用 动态二维数组的两种方法
(PS:仅作创建 动态二维数组参考,详细使用方法根据需求自行改变)
- 第一种:连续存储结构的 二维动态数组(需固定 列 大小,可通过下标访问)
缺点:
1.需要在设计二维数组前写死 列 的大小
2.空间利用率不高
优点:
1.可以通过下标快速查找数据、修改数据(效率高)- 第二种:非连续存储结构 二维动态数组(不可以通过下标访问)
缺点:
1.不能随机查找,必须从第一个开始遍历,查找效率低
2.需要逐级删除 二维动态数组
优点:
1.空间利用率高
源码
#include<iostream>using namespace std;//第一种方法:此方法创建的动态二维数组 是 “连续数组 并且 固定列数”
void TestFunc(unsigned int n)
{unsigned int i, j;//创建一个固定列为 5 大小的二维数组int(*array_two)[5] = new int[n][5];//赋值操作和操作正常二维数组一样for (i = 0; i < n; i++){for (j = 0; j < 5; j++){array_two[i][j] = i * 5 + j;}}//访问数据cout << array_two[2][3] << endl;//回收方法和普通数组一样delete[] array_two;
}
//第二种方法:此方法创建的动态二维数组 是 “非连续数组”
void TestFunc_printer(unsigned int Height, unsigned int Width)
{unsigned int i, j;//用二级指针创建 行 动态数组(也就是每一行的头部)int **array_two = new int *[Height];//循环 行 从头到尾赋值 列for (i = 0; i < Height; i++){//一维数组创建 列 动态数组(也就是给每一行分配多少列)array_two[i] = new int[Width];}//访问方法for (i = 0; i < Height; i++){for (j = 0; j < Width; j++){//赋值array_two[i][j] = i * 5 + j;}}//此方法不能直接访问数据//cout << array_two[3][6] << endl;//二维动态数组的 访问方法for (i = 0; i < Height; i++){for (j = 0; j < Width; j++){if (i == 2 && j == 6){//打印指定的值cout << array_two[i][j] << endl;}}}//删除方法//先删除 每一行中的每一列for (i = 0; i < Height; i++){//删除一维数组delete[] array_two[i];}//此处直接删除 行 即可delete[] array_two;
}
void main()
{TestFunc(6);//创建一个 array_two[6][5] 的固定列的动态二维数组TestFunc_printer(3,9);//创建一个 array_two[3][9] 的非连续动态二维数组system("pause");
}