You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

C++中如何调整存储自定义对象的动态数组的大小

C++ 手动实现动态指针数组扩容插入员工的方案

核心实现逻辑

  • 提前维护两个配套变量:int current_size 记录当前已存入的员工数量,int capacity 记录数组当前的最大容纳量,初始插入第一名员工后,current_size = 1,capacity = 1
  • 插入新员工前先判断是否需要扩容:如果current_size == capacity,就触发扩容逻辑
  • 扩容时先申请容量为原容量2倍的新指针数组,避免频繁申请内存造成性能损耗
  • 将旧数组的所有指针元素逐位拷贝到新数组
  • 释放旧数组的内存(注意只释放数组本身,不要释放内部的Worker对象指针,避免后续访问失效)
  • 将原数组指针指向新数组,更新capacity为新的容量值
  • 把新员工指针存入数组尾部,更新current_size

完整代码示例

// 初始状态为插入第一名员工后的值
Worker** list_of_workers = new Worker*[1];
list_of_workers[0] = new Worker(name, id, seniority);
int current_size = 1;
int capacity = 1;

// 插入新员工的逻辑
void insert_worker(const std::string& name, int id, int seniority) {
    // 触发扩容逻辑
    if (current_size == capacity) {
        // 扩容为原容量的2倍
        int new_capacity = capacity * 2;
        Worker** new_list = new Worker*[new_capacity];
        // 拷贝旧元素到新数组
        for (int i = 0; i < current_size; i++) {
            new_list[i] = list_of_workers[i];
        }
        // 释放旧数组的内存
        delete[] list_of_workers;
        // 更新指针和容量
        list_of_workers = new_list;
        capacity = new_capacity;
    }
    // 插入新员工
    list_of_workers[current_size] = new Worker(name, id, seniority);
    current_size++;
}

注意事项

  • 程序退出前要遍历数组逐个释放所有Worker对象,再释放list_of_workers数组本身,避免内存泄漏
  • 如果不是课程要求手动实现动态数组,优先使用STL提供的std::vector<Worker*>或者std::vector<std::unique_ptr<Worker>>,不需要手动处理扩容逻辑,更安全不易出错

内容的提问来源于stack exchange,提问作者Hen Simkin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 07:57:02