回顾:动态数组管理器
本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 17 课,共 104 课。
挑战
简单让我们来构建一个 DynamicArray 类,让它像 std::vector 在底层那样管理自己的内存,并在需要时自动扩容!
你将创建两个文件来组织代码:
DynamicArray.h:定义一个DynamicArray类,用于管理大小可变的整数数组。你的类应包含:- 私有成员:指向数据数组的指针、当前大小(元素数量)和容量(已分配的空间)
- 一个构造函数,接收初始容量,在堆上分配数组,并将大小初始化为 0
- 一个析构函数,用于释放已分配的内存并打印
"DynamicArray destroyed" - 一个
push(int value)方法,用于向数组添加元素。如果数组已满,就分配一个更大的新数组,将容量翻倍,复制现有元素,然后释放旧数组 - 一个
get(size_t index)方法,用于返回给定索引处的元素 - 一个
getSize()方法,用于返回当前元素数量 - 一个
getCapacity()方法,用于返回当前容量
main.cpp:读取初始容量和要添加的值的数量。然后读取相应数量的整数值,并将每个值推入你的 DynamicArray。添加完所有值后,打印:"Size: <size>""Capacity: <capacity>""Elements: <e1> <e2> ..."(所有元素之间用空格分隔)
输入格式如下:
- 第一行:初始容量(整数)
- 第二行:要添加的值的数量(整数)
- 后续各行:每行一个整数值
调整大小时,数组的容量应翻倍。例如,如果初始容量为 2,并推入第三个元素,容量应变为 4。这体现了 RAII 原则。你的类在构造函数中获取内存,并在析构函数中释放内存,从而确保不会发生内存泄漏。
在 main.cpp 中使用 #include "DynamicArray.h" 引入头文件。
亲手试试
#include <iostream>
#include "DynamicArray.h"
using namespace std;
int main() {
// 读取初始容量
int initialCapacity;
cin >> initialCapacity;
// 读取要添加的值的数量
int numValues;
cin >> numValues;
// TODO: 用初始容量创建一个 DynamicArray
// TODO: 读取 numValues 个整数,并将每个整数加入数组
// TODO: 输出 "Size: <size>"
// TODO: 输出 "Capacity: <capacity>"
// TODO: 输出 "Elements: <e1> <e2> ..."(所有元素用空格分隔)
return 0;
}
面向对象编程中的所有课
自己练习: C++ 在线编译器