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

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

DynamicList设计要点

template <typename T>
class DynamicList : public SeqList<T>
{
protected:
int m_capacity; //顺序存储空间的大小
public:
DynamicList(int capacity); //申请空间
int capacity() const;
/*重新设置顺序存储空间的大小*/
void resize(int capacity);
~DynamicList(); //归还空间
};

DynamicList.h

#ifndef DYNAMICLIST_H
#define DYNAMICLIST_H #include "Seqlist.h"
#include "Exception.h" namespace DTLib
{
template <typename T>
class DynamicList : public SeqList<T>
{
protected:
int m_capacity; //顺序存储空间的大小
public:
DynamicList(int capacity) //申请空间
{
this->m_array = new T[capacity]; if(this->m_array != NULL)
{
this->m_length = ;
this->m_capacity = capacity;
}
else
{
THROW_EXCEPTION(NoEnoughMemoryException,"No memory to create Dynamiclist object...");
} }
int capacity() const
{
return m_capacity;
}
/*重新设置顺序存储空间的大小*/
void resize(int capacity)
{
if(m_capacity != capacity)
{
T* array = new T[capacity]; if(array != NULL)
{
int length = (this->m_length < capacity ? this->m_length : capacity); for(int i=; i<length; i++)
{
array[i] = this->m_array[i];
} T* temp = this->m_array;
this->m_array = array;
this->m_length = length;
this->m_capacity = capacity;
delete[] temp; }
else
{
THROW_EXCEPTION(NoEnoughMemoryException,"No memory to resize Dynamiclist object...");
}
}
}
~DynamicList() //归还空间
{
delete[] this->m_array;
}
}; }
#endif // DYNAMICLIST_H

main.cpp

#include <iostream>
#include "Dynamiclist.h" using namespace std;
using namespace DTLib; int main()
{
DynamicList<int> sl(); for(int i=; i<sl.capacity(); i++)
{
sl.insert(,i); //每次都在线性表的头部进行插入
} for(int i=; i<sl.length(); i++)
{
cout << sl[i] << endl;
}
cout << endl; sl.resize();
sl.insert(,); for(int i=; i<sl.length(); i++)
{
cout << sl[i] << endl;
} return ;
}

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. C#异步编程看这篇就够了

    随着.NET Core的流行,相信你现在的代码中或多或少的会用到async以及await吧!毕竟已成标配.那么我们为什么要用async以及await呢?其实这是微软团队为我们提供的一个语法糖,让我们不 ...

  2. Altium PCB二维码Logo设计(转 crazybingo)

    Altium PCB二维码Logo设计 每次设计PCB的时候,都会在空白部分放Logo上去,一来板卡显得更充实,二来更有成就感一些... 今天突然想着...这两年二维码越来越火,火到快爆发,不如在板卡 ...

  3. Day 02 作业

    作业 一 什么是编程? 基于编程语言的语法格式将自己脑中里想让计算机做的事,写到文件中. 二 简述计算机五大组成 控制器,运算器,存储器,输入设备,输出设备 三 操作系统有什么用? 操作系统直接与硬件 ...

  4. Orleans[NET Core 3.1] 学习笔记(一).NET环境下的分布式应用程序

    前言 Orleans是一个跨平台的框架,用于搭建可扩展的分布式应用程序 第一次接触Orleans还是两年前做游戏服务器的时候,用SignalR+Orleans的组合,写起代码来不要太爽. 即将进入20 ...

  5. 第一个boot项目

    一.打开网址https://start.spring.io/ 进去springboot官网,根据自己实际情况选择所需组件,点击生成. 二.导入maven项目,但是pom.xml报Line1未知错误,检 ...

  6. django----聚合查询 分组 F与Q查询 字段 及其 参数

    目录 一.orm补充查询 聚合查询 1-1 分组查询 1-2 F与Q查询 1-3 二. 字段及其参数 常用字段 AutoField IntegerField CharField DateField D ...

  7. SQL- SQL查询检索阶段一

    一 说明 如果是初学者,建议去网上寻找安装Mysql的文章安装,以及使用navicat连接数据库,以后的示例基本是使用mysql数据库管理系统: 二 准备前提 需要建立一张学生表,列分别是id,名称, ...

  8. java基础面向对象总结(一)

    年底了,总结下知识点和遇到过的面试题目. 1,如何理解面相对象. ‘万物皆对象’说的没错,听起来挺反感的,问一个说一个.有些话觉得用自己的话讲出来肯俗点,但可以证明你理解了一点.我理解的是:之所以叫面 ...

  9. HttpRunner学习6--使用parameters参数化

    前言 在使用HttpRunner测试过程中,我们可能会遇到这种场景: 账号登录功能,需要输入用户名和密码,设计测试用例后有 N 种组合情况 如果测试组合比较少,比如只有2个,那我们直接在YAML脚本中 ...

  10. 浅析 Java 与 C++ 的垃圾回收机制

        Java老师在期末复习大纲上出了一道关于JVM垃圾回收机制的题目,想要我们简述一下JVM垃圾回收机制,与老师交流后,大概老师是希望通过与其他语言在垃圾回收对比,介绍一下Java在这方面的特点和 ...