c++中如何定义动态数组

来源:Golang编程网作者:上海SEO公司头衔:草根站长
导读:本期聚焦于小伙伴创作的《c++中如何定义动态数组》,敬请观看详情,探索知识的价值。以下视频、文章将为您系统阐述其核心内容与价值。如果您觉得《c++中如何定义动态数组》有用,将其分享出去将是对创作者最好的鼓励。

C++中动态数组指的是在程序运行时根据实际需求分配内存大小的数组,不需要在编译阶段就确定数组长度,能灵活应对数据量变化的场景。常见的定义方式有两种,分别是基于new关键字的原生动态数组和基于标准库vector容器的动态数组。

c++中如何定义动态数组

使用new关键字定义动态数组

new是C++中用于动态分配堆内存的操作符,通过它可以创建指定长度的数组,数组长度可以是运行时的变量。定义语法为:数据类型* 数组名 = new 数据类型[数组长度];,分配的内存需要手动通过delete[]释放,避免内存泄漏。

基本定义示例

下面的代码演示了使用new定义int类型动态数组,赋值后遍历输出,最后释放内存的完整流程:

#include <iostream>
using namespace std;

int main() {
    int n;
    cout << "请输入动态数组长度:";
    cin >> n;
    // 定义长度为n的int类型动态数组
    int* arr = new int[n];
    // 给数组元素赋值
    for (int i = 0; i < n; i++) {
        arr[i] = i * 2;
    }
    // 遍历输出数组元素
    cout << "数组元素为:";
    for (int i = 0; i < n; i++) {
        cout << arr[i] << " ";
    }
    cout << endl;
    // 释放动态数组内存,必须用delete[],不能用delete
    delete[] arr;
    arr = nullptr; // 避免野指针
    return 0;
}

注意事项

  • new分配动态数组时,数组长度可以是变量,但不能是负数,否则会抛出异常。
  • 释放动态数组必须使用delete[],如果使用delete只释放首元素内存,会导致剩余元素内存泄漏。
  • 分配内存后建议判断指针是否为空,部分编译器在内存分配失败时会返回nullptr。
  • 释放内存后将指针赋值为nullptr,避免后续误用野指针。

使用vector容器定义动态数组

vector是C++标准模板库(STL)中的动态数组容器,它会自动管理内存,不需要开发者手动分配和释放,使用起来更安全便捷。vector的长度可以动态增长,支持随机访问,是日常开发中最常用的动态数组实现方式。

基本定义示例

下面的代码演示了vector动态数组的定义、添加元素、遍历和常用操作:

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

int main() {
    // 定义空的int类型vector动态数组
    vector<int> vec;
    // 添加元素,vector会自动扩容
    for (int i = 0; i < 5; i++) {
        vec.push_back(i + 1);
    }
    // 也可以直接初始化指定元素
    vector<int> vec2 = {10, 20, 30, 40};
    // 遍历输出vec的元素
    cout << "vec元素为:";
    for (int i = 0; i < vec.size(); i++) {
        cout << vec[i] << " ";
    }
    cout << endl;
    // 使用范围for遍历vec2
    cout << "vec2元素为:";
    for (int num : vec2) {
        cout << num << " ";
    }
    cout << endl;
    // 获取vector当前元素个数
    cout << "vec元素个数:" << vec.size() << endl;
    return 0;
}

常用操作说明

操作说明
push_back(元素)向数组尾部添加一个元素,数组长度自动加1
size()返回当前数组的元素个数
empty()判断数组是否为空,为空返回true
resize(新长度)调整数组长度,若新长度大于原长度会补默认值
clear()清空数组所有元素,长度变为0

两种方式的对比选择

如果是简单的临时动态数组场景,且能确保正确释放内存,可以使用new方式;如果是日常开发中的通用场景,优先选择vector,它的自动内存管理能减少很多出错概率。另外new方式分配的数组是原生指针,不支持很多容器类的便捷操作,而vector提供了丰富的成员函数,开发效率更高。

注意:如果动态数组需要跨作用域传递,使用vector比原生new数组更合适,因为vector遵循值语义,拷贝和传递时不需要额外处理内存问题,而原生new数组传递指针时需要额外考虑内存释放的责任归属。

C++动态数组newvector内存管理修改时间:2026-07-02 05:03:25

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。