📜  如何在C++中的类内创建动态2D数组?(1)

📅  最后修改于: 2023-12-03 14:52:40.981000             🧑  作者: Mango

在C++中的类内创建动态2D数组

在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数组时,需要注意以下几点:

  • 必须在类的析构函数中释放内存,以免内存泄漏;
  • 创建动态2D数组时,参数的顺序可能需要根据具体需要来确定,下标的起始值也需要视具体情况而定;
  • 访问数组元素时,需要保证下标的值是合法的,否则可能访问到非法内存,导致程序崩溃或不稳定。