C++ 动态创建二维数组指针详解及数组类实现

动态创建二维数组指针

二维数组指针动态创建可以通过以下步骤实现:

  1. 定义一个指向指针的指针变量,例如 int **arr
  2. 使用动态内存分配函数 malloc() 分配一维数组的内存空间,即 arr 指向的指针数组。
  3. 使用循环语句为每个指针分配内存空间,即二维数组的每一行。
  4. 使用二重循环语句为每个指针所指向的一维数组分配内存空间,即二维数组的每一个元素。
  5. 对二维数组进行赋值和操作。
  6. 使用 free() 函数释放内存空间。

下面是一个示例代码:

#include <stdio.h>
#include <stdlib.h>

int main() {
    int **arr;
    int rows, cols;
    int i, j;

    printf("Enter the number of rows: ");
    scanf("%d", &rows);
    printf("Enter the number of columns: ");
    scanf("%d", &cols);

    // allocate memory for the pointer array
    arr = (int **)malloc(rows * sizeof(int *));

    // allocate memory for each row
    for (i = 0; i < rows; i++) {
        arr[i] = (int *)malloc(cols * sizeof(int));
    }

    // assign values to the array
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            arr[i][j] = i * cols + j;
        }
    }

    // print the array
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%d ", arr[i][j]);
        }
        printf("\n");
    }

    // free the memory
    for (i = 0; i < rows; i++) {
        free(arr[i]);
    }
    free(arr);

    return 0;
}

解释一下上面代码的实现过程:

  1. 定义一个指向指针的指针变量 arr,用于存储二维数组的地址。
  2. 通过 malloc() 函数分配一维数组的内存空间,即分配 rows 个指针的内存空间,并将其地址赋给 arr
  3. 使用循环语句为每个指针分配内存空间,即分配 colsint 类型的内存空间,用于存储二维数组的每一行。
  4. 使用二重循环语句为每个指针所指向的一维数组分配内存空间,即分配 colsint 类型的内存空间,用于存储二维数组的每一个元素。
  5. 使用循环语句对二维数组进行赋值和操作。
  6. 使用 free() 函数释放内存空间,先释放二维数组每一行的内存空间,再释放指针数组的内存空间。

这样就完成了二维数组指针动态创建的过程。

C++ 数组类实现

以下是一个简单的 C++ 数组类实现:

#include <iostream>
using namespace std;

class Array {
private:
    int* arr;
    int size;

public:
    Array(int s) {
        size = s;
        arr = new int[size];
    }

    ~Array() {
        delete[] arr;
    }

    int& operator[](int index) {
        return arr[index];
    }

    int getSize() const {
        return size;
    }

    // 添加的功能
    void resize(int newSize);
    void insert(int index, int value);
    void remove(int index);
    int find(int value);
    void sort();
    void reverse();
    void copy(Array& other);
    void print();
};

int main() {
    Array a(5);
    for (int i = 0; i < a.getSize(); i++) {
        a[i] = i + 1;
    }
    for (int i = 0; i < a.getSize(); i++) {
        cout << a[i] << " ";
    }
    return 0;
}

这个数组类有一个私有成员变量 arr,它是一个指向整型的指针,用于存储数组元素。还有一个私有成员变量 size,用于存储数组大小。类的构造函数使用 new 运算符动态分配内存空间,将指针 arr 指向数组的首地址。类的析构函数使用 delete[] 运算符释放动态分配的内存空间。类还重载了 [] 运算符,以便可以像使用普通数组一样使用该类。getSize() 函数用于获取数组大小。

main() 函数中,我们创建了一个大小为 5 的数组,并使用 for 循环为其赋值。然后再使用 for 循环输出数组元素。

扩展功能

可以在现有的数组类基础上添加一些功能,例如:

  1. resize(int newSize): 用于重新调整数组大小。当新的大小比原来的大小大时,在末尾添加新的元素;当新的大小比原来的大小小时,删除末尾的元素。
  2. insert(int index, int value): 用于在指定位置插入新的元素。如果插入位置超出了数组范围,则抛出异常。
  3. remove(int index): 用于删除指定位置的元素。如果删除位置超出了数组范围,则抛出异常。
  4. find(int value): 用于查找指定元素在数组中的位置。如果找不到,则返回 -1。
  5. sort(): 用于对数组进行排序,可以使用快速排序、冒泡排序等算法。
  6. reverse(): 用于将数组元素反转。
  7. copy(Array& other): 用于将当前数组复制到另一个数组中。
  8. print(): 用于打印数组元素。

这些功能可以让数组类更加实用和灵活。当然,还可以根据需要添加其他功能。

C++ 动态创建二维数组指针详解及数组类实现

原文地址: https://www.cveoy.top/t/topic/jEui 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录