C++ 动态创建二维数组指针详解及数组类实现
C++ 动态创建二维数组指针详解及数组类实现
动态创建二维数组指针
二维数组指针动态创建可以通过以下步骤实现:
- 定义一个指向指针的指针变量,例如
int **arr。 - 使用动态内存分配函数
malloc()分配一维数组的内存空间,即arr指向的指针数组。 - 使用循环语句为每个指针分配内存空间,即二维数组的每一行。
- 使用二重循环语句为每个指针所指向的一维数组分配内存空间,即二维数组的每一个元素。
- 对二维数组进行赋值和操作。
- 使用
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;
}
解释一下上面代码的实现过程:
- 定义一个指向指针的指针变量
arr,用于存储二维数组的地址。 - 通过
malloc()函数分配一维数组的内存空间,即分配rows个指针的内存空间,并将其地址赋给arr。 - 使用循环语句为每个指针分配内存空间,即分配
cols个int类型的内存空间,用于存储二维数组的每一行。 - 使用二重循环语句为每个指针所指向的一维数组分配内存空间,即分配
cols个int类型的内存空间,用于存储二维数组的每一个元素。 - 使用循环语句对二维数组进行赋值和操作。
- 使用
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 循环输出数组元素。
扩展功能
可以在现有的数组类基础上添加一些功能,例如:
resize(int newSize): 用于重新调整数组大小。当新的大小比原来的大小大时,在末尾添加新的元素;当新的大小比原来的大小小时,删除末尾的元素。insert(int index, int value): 用于在指定位置插入新的元素。如果插入位置超出了数组范围,则抛出异常。remove(int index): 用于删除指定位置的元素。如果删除位置超出了数组范围,则抛出异常。find(int value): 用于查找指定元素在数组中的位置。如果找不到,则返回 -1。sort(): 用于对数组进行排序,可以使用快速排序、冒泡排序等算法。reverse(): 用于将数组元素反转。copy(Array& other): 用于将当前数组复制到另一个数组中。print(): 用于打印数组元素。
这些功能可以让数组类更加实用和灵活。当然,还可以根据需要添加其他功能。
原文地址: https://www.cveoy.top/t/topic/jEui 著作权归作者所有。请勿转载和采集!