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

C++中如何为未知大小的数组追加值及初始化该类数组?

解决C++中动态大小数组的初始化与追加问题

嘿,这个场景太常见啦!在C++里处理这种大小取决于循环中追加数据量的数组,完全不用死磕原生数组的初始化——直接用标准库的std::vector就搞定了,它就是为动态扩容的需求量身打造的。

核心方案:用std::vector实现动态数组

std::vector是C++标准库提供的动态数组容器,它会自动帮你管理内存,不用提前指定固定大小,循环里想加多少元素就加多少。举个简单的例子:

#include <vector>
#include <iostream>

int main() {
    // 初始化一个空的vector,不需要指定初始大小
    std::vector<int> dynamic_data;

    // 模拟循环追加数据的场景(这里的循环次数可以是运行时确定的,比如从文件读、用户输入等)
    int input;
    std::cout << "输入数字,输入-1结束:" << std::endl;
    while (std::cin >> input && input != -1) {
        // 直接追加元素,vector会自动扩容
        dynamic_data.push_back(input);
    }

    // 遍历输出所有追加的数据
    std::cout << "你输入的所有数据:" << std::endl;
    for (int num : dynamic_data) {
        std::cout << num << " ";
    }
    return 0;
}

为什么不用原生数组?

C++的原生数组(比如int arr[10];)要求大小必须是编译期常量,没法在运行时根据循环里的实际数据量调整大小。如果硬要用动态分配的原生数组(int* arr = new int[size];),你得手动处理扩容、内存拷贝、释放内存,不仅繁琐,还很容易出现内存泄漏或者越界访问的问题,完全没必要。

进阶小技巧:提前预留空间优化性能

如果你能大概预估循环中会生成多少数据,可以用reserve()提前给vector预留内存空间,避免频繁扩容带来的性能开销:

// 预估大概会有20个数据点,提前预留空间
dynamic_data.reserve(20);

这样当你追加元素时,只要不超过预留的空间,vector就不会重新分配内存,效率会更高。

内容的提问来源于stack exchange,提问作者E LAC SOFT

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:47:47