Menu
CoddyTech

回顾:动态数组管理器

本课属于 Coddy C++ 学习旅程的“面向对象编程”单元。第 17 课,共 104 课。

challenge icon

挑战

简单

让我们来构建一个 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++ 在线编译器