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

C++中如何向无固定大小的数组添加元素,是否有类似Python的append方法

问题解答

核心结论

  • C++原生固定大小数组不支持动态追加元素,你示例中定义的int list1[] = {1,2,3,4}长度固定为4,直接访问list1[4]属于越界访问,是未定义行为,会产生不可预期的运行结果。
  • 想要实现类似Python append的动态追加功能,优先使用C++标准库提供的std::vector动态数组容器。

推荐实现方案:使用std::vector

std::vector是C++标准库封装的动态数组实现,会自动管理内存扩容、元素拷贝等底层逻辑,自带的push_back()方法和Python列表的append功能完全一致,修改后的示例代码如下:

#include <iostream>
#include <vector> // 引入vector头文件
using namespace std;

int main(){
    vector<int> list1 = {1,2,3,4};
    // 向数组末尾追加元素,等价于Python的append功能
    list1.push_back(5);
    cout << list1[4] << endl; // 正常输出5,不会出现越界问题
    return 0;
}

补充说明:C++11及之后的版本还可以用emplace_back()方法,性能比push_back()更优,它会直接在容器尾部构造元素,避免了不必要的临时对象拷贝开销,用法和push_back()完全一致:list1.emplace_back(5);

不推荐的原生数组手动实现方案

如果一定要基于原生数组实现追加功能,需要手动完成内存申请、元素拷贝、内存释放的全流程,示例如下:

#include <iostream>
#include <cstring>
using namespace std;

int main(){
    int* list1 = new int[4]{1,2,3,4};
    int old_len = 4;
    // 申请长度+1的新内存空间
    int* new_list = new int[old_len + 1];
    // 拷贝原有数组的所有元素
    memcpy(new_list, list1, old_len * sizeof(int));
    // 追加新元素
    new_list[old_len] = 5;
    // 释放旧数组的内存空间,避免泄漏
    delete[] list1;
    list1 = new_list;

    cout << list1[4] << endl; // 输出5
    // 最终使用完后要释放新数组内存
    delete[] list1;
    return 0;
}

该方案需要开发者手动管控所有内存操作,非常容易出现内存泄漏、越界访问等问题,除非有特殊场景要求,否则完全不推荐使用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.04 22:06:01