写一个C++类,在堆区申请n个int类型的空间大小,地址给m_array 长度给m_len,释放堆区空间,可以从键盘输入数据输出数据,删除数据,用C++编写
时间: 2024-05-14 17:16:06 浏览: 62
下面是一个示例代码,实现了一个动态分配整型数组的类,可以实现输入、输出、删除等基本操作:
```c
#include <stdlib.h>
#include <stdio.h>
#define DEFAULT_CAPACITY 10
typedef struct {
int *m_array;
int m_len;
int m_capacity;
} IntArray;
IntArray *IntArray_new(int capacity);
void IntArray_delete(IntArray *array);
void IntArray_resize(IntArray *array, int newCapacity);
void IntArray_push(IntArray *array, int value);
void IntArray_pop(IntArray *array, int index);
void IntArray_print(IntArray *array);
int IntArray_readInt();
int main() {
IntArray *array = IntArray_new(DEFAULT_CAPACITY);
printf("Enter integers (0 to exit):\n");
int value = IntArray_readInt();
while (value != 0) {
IntArray_push(array, value);
value = IntArray_readInt();
}
IntArray_print(array);
printf("Enter index to remove (-1 to exit):\n");
int index = IntArray_readInt();
while (index >= 0) {
if (index < array->m_len) {
IntArray_pop(array, index);
IntArray_print(array);
} else {
printf("Index out of range.\n");
}
index = IntArray_readInt();
}
IntArray_delete(array);
return 0;
}
IntArray *IntArray_new(int capacity) {
IntArray *array = (IntArray *)malloc(sizeof(IntArray));
array->m_array = (int *)malloc(capacity * sizeof(int));
array->m_len = 0;
array->m_capacity = capacity;
return array;
}
void IntArray_delete(IntArray *array) {
free(array->m_array);
free(array);
}
void IntArray_resize(IntArray *array, int newCapacity) {
int *newArray = (int *)malloc(newCapacity * sizeof(int));
for (int i = 0; i < array->m_len; i++) {
newArray[i] = array->m_array[i];
}
free(array->m_array);
array->m_array = newArray;
array->m_capacity = newCapacity;
}
void IntArray_push(IntArray *array, int value) {
if (array->m_len == array->m_capacity) {
IntArray_resize(array, array->m_capacity * 2);
}
array->m_array[array->m_len++] = value;
}
void IntArray_pop(IntArray *array, int index) {
for (int i = index; i < array->m_len - 1; i++) {
array->m_array[i] = array->m_array[i + 1];
}
array->m_len--;
if (array->m_len < array->m_capacity / 2) {
IntArray_resize(array, array->m_capacity / 2);
}
}
void IntArray_print(IntArray *array) {
printf("Array:\n");
for (int i = 0; i < array->m_len; i++) {
printf("%d ", array->m_array[i]);
}
printf("\n");
}
int IntArray_readInt() {
int value;
scanf("%d", &value);
return value;
}
```
这个类包含了以下函数:
- `IntArray_new(int capacity)`:创建一个新的整型数组对象,初始容量为 `capacity`。
- `IntArray_delete(IntArray *array)`:释放整型数组对象占用的空间。
- `IntArray_resize(IntArray *array, int newCapacity)`:重新调整整型数组的容量为 `newCapacity`。
- `IntArray_push(IntArray *array, int value)`:在整型数组的末尾添加一个新元素 `value`。
- `IntArray_pop(IntArray *array, int index)`:从整型数组中删除指定下标的元素。
- `IntArray_print(IntArray *array)`:打印整型数组的所有元素。
- `IntArray_readInt()`:从键盘读取一个整数。
在 `main()` 函数中,我们可以使用这些函数来实现对整型数组的输入、输出、删除等操作。
阅读全文