DynamicList设计要点
——类模板
  申请连续空间作为顺序存储空间
  动态设置顺序存储空间的大小
  保证重置顺序存储空间时的异常安全性

DynamicList设计要点
——函数异常安全的概念
  不泄露任何资源
  不允许破坏数据
——函数异常安全的基本保证
  如果异常被抛出
    对象内的任何成员仍然能保持有效状态
    没有数据的破坏及资源泄露

DynamicList设计要点

  1. template <typename T>
  2. class DynamicList : public SeqList<T>
  3. {
  4. protected:
  5. int m_capacity; //顺序存储空间的大小
  6. public:
  7. DynamicList(int capacity); //申请空间
  8. int capacity() const;
  9. /*重新设置顺序存储空间的大小*/
  10. void resize(int capacity);
  11. ~DynamicList(); //归还空间
  12. };

DynamicList.h

  1. #ifndef DYNAMICLIST_H
  2. #define DYNAMICLIST_H
  3.  
  4. #include "Seqlist.h"
  5. #include "Exception.h"
  6.  
  7. namespace DTLib
  8. {
  9. template <typename T>
  10. class DynamicList : public SeqList<T>
  11. {
  12. protected:
  13. int m_capacity; //顺序存储空间的大小
  14. public:
  15. DynamicList(int capacity) //申请空间
  16. {
  17. this->m_array = new T[capacity];
  18.  
  19. if(this->m_array != NULL)
  20. {
  21. this->m_length = ;
  22. this->m_capacity = capacity;
  23. }
  24. else
  25. {
  26. THROW_EXCEPTION(NoEnoughMemoryException,"No memory to create Dynamiclist object...");
  27. }
  28.  
  29. }
  30. int capacity() const
  31. {
  32. return m_capacity;
  33. }
  34. /*重新设置顺序存储空间的大小*/
  35. void resize(int capacity)
  36. {
  37. if(m_capacity != capacity)
  38. {
  39. T* array = new T[capacity];
  40.  
  41. if(array != NULL)
  42. {
  43. int length = (this->m_length < capacity ? this->m_length : capacity);
  44.  
  45. for(int i=; i<length; i++)
  46. {
  47. array[i] = this->m_array[i];
  48. }
  49.  
  50. T* temp = this->m_array;
  51. this->m_array = array;
  52. this->m_length = length;
  53. this->m_capacity = capacity;
  54. delete[] temp;
  55.  
  56. }
  57. else
  58. {
  59. THROW_EXCEPTION(NoEnoughMemoryException,"No memory to resize Dynamiclist object...");
  60. }
  61. }
  62. }
  63. ~DynamicList() //归还空间
  64. {
  65. delete[] this->m_array;
  66. }
  67. };
  68.  
  69. }
  70. #endif // DYNAMICLIST_H

main.cpp

  1. #include <iostream>
  2. #include "Dynamiclist.h"
  3.  
  4. using namespace std;
  5. using namespace DTLib;
  6.  
  7. int main()
  8. {
  9. DynamicList<int> sl();
  10.  
  11. for(int i=; i<sl.capacity(); i++)
  12. {
  13. sl.insert(,i); //每次都在线性表的头部进行插入
  14. }
  15.  
  16. for(int i=; i<sl.length(); i++)
  17. {
  18. cout << sl[i] << endl;
  19. }
  20. cout << endl;
  21.  
  22. sl.resize();
  23. sl.insert(,);
  24.  
  25. for(int i=; i<sl.length(); i++)
  26. {
  27. cout << sl[i] << endl;
  28. }
  29.  
  30. return ;
  31. }

DynamicList的更多相关文章

  1. 第十七课 StaticList和DynamicList实现

    本节我们要实现StaticList和DynamicList,如下: StaticList的设计要点: StaticList是一个类模板,使用原生数组作为顺序存储空间,使用模板参数决定数组大小 在Sta ...

  2. 四、StaticList 和 DynamicList

    1.StaticList类模板 StaticList的设计要点:类模板 使用原生数组作为顺序存储空间 使用模板参数决定数组大小 template <typename T, int N> c ...

  3. 极路由2(极贰)在OpenWrt下定制自己的ss服务

    默认刷入的OpenWrt带的ss, 只有ss-redir服务, 但是在实际使用中, 很多时候还是希望访问直接通过正常网关, 只有少部分访问需要通过ss, 所以希望能配置成为ss-local服务. 在保 ...

  4. AutoMapper 最佳实践

    AutoMapper 是一个基于命名约定的对象->对象映射工具. 只要2个对象的属性具有相同名字(或者符合它规定的命名约定),AutoMapper就可以替我们自动在2个对象间进行属性值的映射.如 ...

  5. vue+node开发手机端h5页面开发遇到的坑

    项目进行中...随时更新 这里记录了一些手机端调试的方式 一 css 1.文字超过span宽度显示...(单行文字) .topWrap .introduce span { padding: 0 17p ...

  6. 如何用easyui+JAVA 实现动态拼凑datagrid表格(续)

    前面一段时间写了一篇文章: 如何用easyui+JAVA 实现动态拼凑datagrid表格 这篇文章的话,效果是可以实现,但是经过我反复试验,还是存在一些问题的. 今天这篇文章就是向大家介绍下如何避免 ...

  7. 如何用easyui+JAVA 实现动态拼凑datagrid表格

    先给大家看一看效果,最近一段时间都在研究这个东西. 如果我把日期间隔选宽呢?比如5月日到5月5日?下面给大家看看效果,不用担心哦 看到了吧,哈哈,这个日期都是动态生成的,下面就来跟大家分享一下这个的实 ...

  8. dataGrid查询表格

    waf("#Gird").dataGrid("reloadGrid") //重新发请求去装载数据 waf("#Grid").wafGrid( ...

  9. Luci中cbi控件类型总结

    转自:http://blog.chinaunix.net/uid-28413840-id-4654479. 名称 描述 继承自 模板 NamedSection A fixed configuratio ...

随机推荐

  1. 小胖求学系列之-文档生成利器(下)-smart-doc

    叮叮叮....一阵铃声响起,大家都陆续来到了课堂,看老师没来,小张和小胖又闲聊起来,小张问:怎么样,smart-doc好用吧.小胖笑着说:挺好用的,不过? 小张看卖关子,问到:不过什么,有什么新发现? ...

  2. 【ActiveMQ】使用学习

    [ActiveMQ]使用学习 转载: 1.启动 activemq start 2.停止 activemq stop http://localhost:8161 admin / admin Queue ...

  3. Python3之Django的Cookie与Session的使用

    一.Cookie的使用 1.设置Cookie url.set_cookie("tile","zhanggen",expires=value,path='/' ) ...

  4. 简单学习【1】——使用webpack

    使用webpack webpack命令 webpack配置 第三方脚手架 1.webpack命令 webpack - h (webpack 所有的选项) webpack -v (查看webpack的版 ...

  5. LeetCode刷题总结-树篇(中)

    本篇接着<LeetCode刷题总结-树篇(上)>,讲解有关树的类型相关考点的习题,本期共收录17道题,1道简单题,10道中等题,6道困难题. 在LeetCode题库中,考察到的不同种类的树 ...

  6. 服务器端Mysql常用操作

    原文内容来自于LZ(楼主)的印象笔记,如出现排版异常或图片丢失等问题,可查看当前链接:https://app.yinxiang.com/shard/s17/nl/19391737/f7463513-5 ...

  7. Winform中实现拖拽文件到ListView获取文件类型(附代码下载)

    场景 效果 注: 博客主页: https://blog.csdn.net/badao_liumang_qizhi关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建一个for ...

  8. HA: Infinity Stones Vulnhub Walkthrough

    下载地址: https://www.vulnhub.com/entry/ha-infinity-stones,366/ 主机扫描: 目录枚举 我们按照密码规则生成字典:gam,%%@@2012 cru ...

  9. IoT缺德相关

    https://github.com/nebgnahz/awesome-iot-hacks <揭秘家用路由器0day漏洞挖掘技术> Embedded Device Security: Pw ...

  10. Mysql 主从复制搭建-极简版

    前言 自己在百度.Google一番踩坑搭建成功后,记录一下,也希望后来人不再被这些坑到. 这里为了方便使用 docker,不会的同学请移步相关 Docker 教程. 正文 1. 启动 mysql #启 ...