C++课件第8章:动态内存分配.pptxVIP

  1. 1、本文档共128页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
第8章 动态内存分配;内容提要;8.1 动态分配内存的概念方法;计算机内存空间分布;示例:内存分配与住宿问题;动态内存分配的方法;动态申请与释放数组空间;动态分配数组空间的注意点一;例:动态数组的分配与撤销;动态分配数组空间的注意点二;动态内存分配的常见雷区;动态内存分配的排雷方案;关于野指针(Wild Pointer);动态二维数组;例:动态二维数组的实现;例:动态二维数组的实现;8.2 对象与动态内存分配;动态分配变量的生存期;概念:三种特殊的对象;三种没有名字的对象;深复制与浅复制; 图7.1 浅复制 ;  当浅复制析构时,如用默认的析构函数,则动态分配的自由存储区对象不能回收。如果在析构函数中有“delete p;”语句,则如果先析构函数obj1时,自由存储区对象已经释放,以后再析构obj2时出现了二次释放的问题。;例:深复制的实现——学生类;例:深复制的实现——学生类;例:深复制的实现——学生类;例:深复制的实现——学生类;例:深复制的实现——学生类;深复制与类封装的深入讨论;8.3 标准C++库中的string类;标准C++库中的string类;标准C++库中的string类;标准C++库中的string类;标准C++库中的string类;标准C++库中的string类;标准C++库中的string类;关于string类的思考和猜想;第一个版本:自定义string类;mystring类的实现;mystring类的实现;mystring类的实现;mystring类的实现;mystring类的后续; 线性表是最简单,最常用的一种数据结构。线性表的逻辑结构是n个数据元素的有限序列(a1,a2,…,an)。而线性表的物理结构包括:顺序表,链表 。;单链表的基本构成;链表节点的C风格实现;关于typedef(P173);链表的操作要点;第一个结点通常称为头节点,其对应的指针head称为头指针。head在使用中不可丢失,否则整个链表都会发生内存泄漏。 最后一个节点,通常称为尾节点tail,其地址域的值为NULL,表示链表到此结束。;链表的基本操作;链表的插入算法;;;; 研究以上算法,插在链表第一个结点之前与其他结点之前的算法有所不同。要使算法中没有特殊者,可以给每一个链表加上一个表头结点。;;;思考:更多的链表生成方式;链表查找算法(按关键字)查找;链表插入算法;思考:更多的链表插入函数;void del (node *p){ node *q; q=p-link; p-link=q-link; delete q; //如果要把该节点移入另一个链中,则可将q返回。 } 思考:仿造插入算法,思考更多的删除方式。;思考与练习;data;data;a;更多链表的实现内容(*);C风格链表实现的不足;单链表类型模板;单链表节点类;单链表节点类实现;单链表节点类实现;单链表类型模板;单链表类型模板;单链表模板类函数;templatetypename Tvoid ListT::MakeEmpty(){//清空链表 NodeT *tempP; while(head-link!=NULL){ tempP=head-link; head-link=tempP-link; //把头结点后的第一个结点从链中脱离 delete tempP; } //删除(释放)脱离下来的结点 tail=head; } //表头指针与表尾指针均指向表头结点,表示空链;templatetypename T NodeT* ListT::Find(T data){ NodeT *tempP=head-link; while(tempP!=NULLtempP-info!=data) tempP=tempP-link; return tempP; //搜索成功返回地址,不成功返回NULL } ;templatetypename Tint ListT::Length(){ //链表长度 NodeT* tempP=head-link; int count=0; while(tempP!=NULL){ tempP=tempP-link;count++;} return count; } ;templatetypename Tvoid ListT::InsertFront(NodeT *p){ p-link=head-link; head-link=p; if(tail==head) tail=p;} templatetypename Tvoid ListT::InsertRear(NodeT *p){ p-link

文档评论(0)

jyr0221 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档