📅  最后修改于: 2023-12-03 14:52:40.981000             🧑  作者: Mango
在C++中,创建动态2D数组可以使得程序更灵活,便于管理和调用。在类中创建动态2D数组,可以让数据成员更加封装,避免外部对数据的直接操作,提高代码的安全性和规范性。
类内创建动态2D数组的实现方式有多种,本篇介绍两种较为常用的方式:
首先在类的私有数据成员中声明指向指针的指针(即双指针),在类的构造函数中根据需要动态分配内存。具体实现如下:
class DynamicArray
{
private:
int **array; // 双指针
int rowNum; // 行数
int columnNum; // 列数
public:
DynamicArray(int row, int col)
{
rowNum = row;
columnNum = col;
// 动态分配内存
array = new int *[rowNum];
for(int i = 0; i < rowNum; i++)
array[i] = new int[columnNum];
}
~DynamicArray()
{
// 释放内存
for(int i = 0; i < rowNum; i++)
delete[] array[i];
delete[] array;
}
};
使用双指针的方式,访问数组元素时,需要使用两个下标,如:array[i][j]
。
在类中声明一个指针,指向动态数组;在类的构造函数中根据需要动态分配内存。具体实现如下:
class DynamicArray
{
private:
int *array; // 指向动态数组的指针
int rowNum; // 行数
int columnNum; // 列数
public:
DynamicArray(int row, int col)
{
rowNum = row;
columnNum = col;
// 动态分配内存
array = new int[rowNum * columnNum];
}
~DynamicArray()
{
// 释放内存
delete[] array;
}
// 计算元素在数组中的下标
int index(int row, int col)
{
return row * columnNum + col;
}
// 访问数组元素
int& operator()(int row, int col)
{
return array[index(row, col)];
}
};
使用动态数组的方式,访问数组元素时,需要调用已定义的运算符()
,如:array(i, j)
。
下面是一个使用上述方式创建动态2D数组的示例代码:
#include <iostream>
using namespace std;
class DynamicArray
{
private:
int **array; // 双指针
int rowNum; // 行数
int columnNum;// 列数
public:
DynamicArray(int row, int col)
{
rowNum = row;
columnNum = col;
// 动态分配内存
array = new int *[rowNum];
for(int i = 0; i < rowNum; i++)
array[i] = new int[columnNum];
}
~DynamicArray()
{
// 释放内存
for(int i = 0; i < rowNum; i++)
delete[] array[i];
delete[] array;
}
// 访问数组元素
int& operator()(int row, int col)
{
return array[row][col];
}
};
int main()
{
// 创建动态2D数组
DynamicArray arr(3, 4);
// 赋值和输出
for(int i = 0; i < 3; i++)
{
for(int j = 0; j < 4; j++)
{
arr(i, j) = i * j;
cout << arr(i, j) << '\t';
}
cout << endl;
}
return 0;
}
输出结果:
0 0 0 0
0 1 2 3
0 2 4 6
在使用动态2D数组时,需要注意以下几点: