介绍
本文主要介绍使用 动态二维数组的两种方法
(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");
}