C++用new创建动态数组

这篇具有很好参考价值的文章主要介绍了C++用new创建动态数组。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

如果通过像下面这样一般的方法来声明数组,则在程序编译的时候为其分配内存,不管程序最终是否用到这个数组,数组都在那里并占用内存,即静态联编。但是如果使用new,则在运行阶段需要它才进行创建,不需要则不创建,这叫动态联编,这种创建的数组叫做动态数组。并且静态联编必须在写程序时就声明数组长度,而动态联编在运行时才确定数组的长度。

int arr[5];

用new创建动态数组:

double *p3 = new double[3];

上述代码使得声明一个长为3,类型为double的动态数组。

delete动态数组:

delete []p3;

 使用new和delete时应遵守的规则:

C++用new创建动态数组

声明完动态数组,我们可以通过下面的方式进行初始化:

  • 默认情况下,new分配的对象都有默认初始化
int *p1=new int[10];   //10个未初始化的int
int *p2=new int[10](); //10个初始化为0的int
string *p3=new string[10];  //10个空的string
string *p4=new string[10]();//10个空的string
  • C++11标准:花括号初始化器初始化
int *p1=new int[5]{0,1,2,3,4};
string *p3=new string[3]{"a","the",string(3,'x')};
  • bad_array_new_length异常:当初始化数目大于元素数目时,new表达式失败,抛出此异常。此异常定义在new头文件中

并且动态分配一个空数组是合法的!

  • 动态分配一个数组是合法的,new返回一个合法的非空指针,此指针保证与new返回的其它任何指针都不相同。但是不能对此指针解引用
  • 普通数组定义一个空数组是不允许的
int arr[0];  //错误
int *p = new int[0];  //正确

动态数组的访问:

我们创建了一个动态数组指针p3后,我们可以通过p3[i]来直接访问数组中的第i个元素。请注意!这与我们一般使用*(p3 + i)来访问不同!

C++用new创建动态数组

C++用new创建动态数组

 可以看到,上述代码将指针p3当作数组名使用 。

C++用new创建动态数组


下面不妨让我们再了解下new一下其他数据结构的操作吧:

  •  比如我们Leetcode中的常客:单链表,其数据结构定义如下
/**
 * Definition for singly-linked list.
 * struct ListNode {
 *     int val;
 *     ListNode *next;
 *     ListNode() : val(0), next(nullptr) {}
 *     ListNode(int x) : val(x), next(nullptr) {}
 *     ListNode(int x, ListNode *next) : val(x), next(next) {}
 * };
 */

 这时我们可以用new来新建一个链表节点:

ListNode *p1 = new ListNode(-1);
  • 我们还可以用new来创建任意自定义数据类型 

 参考资料:

C++:34---动态数组(new)_董哥的黑板报的博客-CSDN博客_c++动态数组 new文章来源地址https://www.toymoban.com/news/detail-483555.html

到了这里,关于C++用new创建动态数组的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C++之动态分配new & 删除delete & 初始化memset

    1.引言 用new创建数组的优势:由于new创建的对象是在运行时确立的,所以有着具体情况具体分析的优点,那么什么叫做具体情况具体分析呢? 举一个十分贴切的例子: 比如你在度假,已经做好每天的参观计划,可突然有一天天气不好或是你的心情不好,此时你就不想参观了

    2024年02月08日
    浏览(58)
  • C++与C语言动态内存管理的不同 new与malloc

      目录 1.C语言动态内存管理方式 2.C++中动态内存管理 2.1 new和delete操作内置类型 2.2 new和delete操作自定类型 2.3 为什么delete要带[ ]  3.new申请空间失败 4.operator new 与 operator delete 函数 5.new与delete的是实现原理 5.1 内置类型 5.2 自定义类型 6.定位new表达式(了解即可) 7.malloc/free和

    2024年02月08日
    浏览(42)
  • [C++] 一篇带你了解C++中动态内存管理,new让大家都有对象

      目录 1、C/C++内存分布 2.、C语言中动态内存管理方式:malloc、calloc、realloc 3、C++内存管理方式 3.1 new/delete操作内置类型 3.2 new和delete操作自定义类型 3.3 malloc与new的异常处理机制 4、operator new与operator delete函数 4.1 operator new与operator delete函数 4.1.1 operator new源码 4.1.2 operator del

    2024年02月13日
    浏览(83)
  • 一键式 new 多个相同的实例(通过界面按钮 来控制 应用的创建、修改、删除,使用Docker Compose 编排应用所需环境)

    需求:通过界面按钮 来控制 实例的创建、修改、删除。 由于Web应用采用多服务方式开发,每个服务都可以单独访问(单独占用一个端口)。以前部署服务器,采用的Nginx监听端口 转发。但是这样就会在new整个应用的时候,就需要暴露很多端口(每个服务都可以单独访问)、

    2023年04月25日
    浏览(41)
  • C语言——动态数组的创建和使用

    C语言学习资源汇总,史上最全面总结,没有之一 C/C++学习资源(百度云盘链接) 计算机二级资料(过级专用) C语言学习路线(从入门到实战) 编写C语言程序的7个步骤和编程机制 C语言基础-第一个C程序 C语言基础-简单程序分析 VS2019编写简单的C程序示例 简单示例,VS2019调

    2024年02月06日
    浏览(31)
  • C++数组之动态数组

    目录  1.摘要     2.动态数组内存分配 1一维数组 2多维数组(以2维为例) 3.动态数组初始化 1默认初始化 2.自定义初始化 4.动态数组释放 5.例子 Gradebook类的实现 6.参考文章         数组是一种顺序存储的数据结构,在定义数组时,首先要确定数组的大小。静态数组在 编

    2024年02月03日
    浏览(32)
  • c++ 子数组动态规划问题

    1.最大子数组和   力扣 给你一个整数数组 nums ,请你找出一个具有最大和的连续子数组(子数组最少包含一个元素),返回其最大和。 子数组 是数组中的一个连续部分。 示例 1: 示例 2: 示例 3: 2.环形子数组最大和 力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 给

    2024年02月12日
    浏览(39)
  • C++中动态数组的使用

    假设要在应用程序中存储医院的病历,程序员将无法知道需要处理的病历数上限。就小医院而言,为稳妥起见,程序员可对上限做合理的假设。在这种情况下,程序员将预留大量的内存,进而降低系统的性能。 为减少占用的内存,可不使用前面介绍的静态数组,而使用动态数

    2024年02月13日
    浏览(28)
  • Ubuntu下面创建文本文档.txt

    第一步:在 主目录 下找到 模板 文件夹; 第二步::在 模板 文件夹下右键(选择 在终端中打开 ) 第三步:在终端中输入: sudo gedit 新建文本文档.txt ,然后输入密码即可; 第四步:在新建文本文档.txt右上角点击保存即可; 第五步:即可在任意位置新建文本文档.txt

    2024年02月13日
    浏览(40)
  • 动态规划:路径和子数组问题(C++)

    1.不同路径(中等) 链接:不同路径 题目描述 做题步骤 状态表示 尝试 定义状态表示为到达[m, n]位置的路径数 。 状态转移方程 通过上述分析,可知状态转移方程为: dp[i][j] = dp[i - 1][j] + dp[i][j - 1] 。 初始化 填表顺序 保证填当前状态时,所需状态已经计算过,从起点出发,

    2024年02月10日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包