随笔分类 -  编程语言及数据结构

摘要:问题:长度相同的两个SeqList,插入和删除操作的平均耗时是否相同? 下面的代码正确吗?为什么? 2. 导致上面出现问题的原因就是,拷贝构造函数和赋值操作,因此我们可以这样解决: 对于容器类型的类,可以考虑禁用拷贝构造和赋值操作。 下面的代码正确吗?为什么? 这段程序会崩掉,因为你把线性表当作数组 阅读全文
posted @ 2019-12-17 22:57 一代枭雄 阅读(204) 评论(0) 推荐(0)
摘要:创建好的基于顺序存储结构的线性表存在两个方面的问题:1)功能上的问题:数组操作符的重载带来的问题,有可能线性表被无用为数组了,线性表被当做数组来使用了。2)效率方面的问题 本篇博客就要解决功能上的问题。 数组类的开发需要在DTLib中提供安全可靠的原生数组的代替品,原生数组C++是直接支持的,但是原 阅读全文
posted @ 2019-12-17 22:57 一代枭雄 阅读(445) 评论(0) 推荐(0)
摘要:DynamicList设计要点——类模板 申请连续空间作为顺序存储空间 动态设置顺序存储空间的大小 保证重置顺序存储空间时的异常安全性 DynamicList设计要点——函数异常安全的概念 不泄露任何资源 不允许破坏数据——函数异常安全的基本保证 如果异常被抛出 对象内的任何成员仍然能保持有效状态 阅读全文
posted @ 2019-12-16 21:41 一代枭雄 阅读(456) 评论(0) 推荐(0)
摘要:到目前为止,我们还无法创建一个顺序存储结构线性表的对象出来,为什么呢?顺序存储空间究竟是什么,顺序存储空间的大小是多少? StaticList设计要点——类模板 使用原生数组作为顺序存储空间 使用模板参数决定数组大小 StaticList.h 测试main.cpp 实验二: 这个地方抛出了一个异常, 阅读全文
posted @ 2019-12-15 23:58 一代枭雄 阅读(447) 评论(1) 推荐(0)
摘要:完成顺序存储结构线性表的抽象实现 在SeqList中的关键操作都已经实现了,但它还是一个抽象类,为什么呢?顺序存储空间的指定并没有在SeqList中完成,由StaticList和DynamicList这两个子类中完成。 SeqList设计要点——抽象类模板,存储空间的位置和大小由子类完成——实现顺序 阅读全文
posted @ 2019-12-15 22:50 一代枭雄 阅读(285) 评论(0) 推荐(0)
摘要:顺序存储的定义线性表的顺序存储结构,指的是用一段地址连续的存储单元依次存储线性表中的数据元素。 在C++中的表现是什么样子的呢?可以考虑用一个数组,一个固定大小的数组来作为存储介质存储线性表中的元素。 如何用C++里面的原生数组实现一个线性表。原生数组符合顺序存储的定义 设计思路——可以用一维数组来 阅读全文
posted @ 2019-12-15 20:30 一代枭雄 阅读(335) 评论(0) 推荐(0)
摘要:线性表(List)的表现形式——零个或多个数据元素组成的集合——数据元素在位置上是有序排列的——数据元素的个数是有限的——数据元素的类型必须相同 线性表的一些常用操作——将元素插入线性表——将元素从线性表中删除——获取目标位置处元素的值——设置目标位置处元素的值——获取线性表的长度——清空线性表 线 阅读全文
posted @ 2019-12-15 19:18 一代枭雄 阅读(232) 评论(0) 推荐(0)
摘要:遵循经典设计准则——DTLib中的所有类位于单一的继承树中 Object这个顶层父类定义了动态内存申请时的行为,当动态内存申请失败时,直接返回空指针,并不会抛出异常。所以说DTLib中的每一个类,在动态内存申请结束时一定要判断是不是空指针 为什么要增加InvalidOperationExceptio 阅读全文
posted @ 2019-12-15 18:37 一代枭雄 阅读(201) 评论(0) 推荐(0)
摘要:创建一个可复用的数据结构类库可复用:就是在不同的工程里面可以使用这门课创建的数据结构库,在不同的编译器、不同的工程里使用DTLib都是可以的。当代软件架构实践中的经验——尽量使用单重继承的方式进行系统设计 (单重继承+多接口)——尽量保持系统中只存在单一的继承树 (在当代的软件架构中是如何来保证呢? 阅读全文
posted @ 2019-12-15 11:49 一代枭雄 阅读(303) 评论(0) 推荐(0)
摘要:1.Exception.h 中增加ArithmetricException类 2.Exception.h 中增加NullPointerException类 3.Exception.h 中增加IndexOutOfBoundsException类 4.Exception.h 中增加NoEnoughMem 阅读全文
posted @ 2019-12-13 23:56 一代枭雄 阅读(301) 评论(0) 推荐(0)
摘要:异常类构建异常的类型可以是自定义类类型对于类类型异常的匹配依旧是从上到下严格的匹配赋值兼容性原则在异常匹配中依然适用一般而言-匹配子类异常的catch放在上部-匹配父类异常的catch放在下部 现代C++库必然包含充要的异常类族异常类是数据结构类所依赖的基础设施 Exception是一个抽象类,不能 阅读全文
posted @ 2019-12-13 23:41 一代枭雄 阅读(972) 评论(0) 推荐(0)
摘要:智能指针实际上就是通过模板技术实现的一个类 内存泄露(臭名昭著的Bug)——在软件开发和测试阶段都不容易被发现-动态申请堆空间,用完后不归还-C++语言中没有垃圾回收的机制-指针无法控制所指堆空间的生命周期 当代C++软件平台中的智能指针-指针生命周期结束时主动释放堆空间-一片堆空间最多只能由一个指 阅读全文
posted @ 2019-12-12 22:16 一代枭雄 阅读(494) 评论(0) 推荐(0)
摘要:数据结构课程的特点-专注于数据元素之间的关系-专注于特定结构之上的算法 数据结构课程并不关注数据元素的具体类型。 泛型编程的概念-不考虑具体数据类型的编程方式对于Swap函数可以考虑下面的泛型写法 void Swap(T& a, T& b) { T t = a; a = b; b = t; } Sw 阅读全文
posted @ 2019-12-12 21:23 一代枭雄 阅读(282) 评论(0) 推荐(0)
该文被密码保护。
posted @ 2019-12-11 22:23 一代枭雄 阅读(33) 评论(0) 推荐(0)
摘要:1.编写一个程序判断一个变量是不是指针? 拾遗-C++中仍然支持C语言中的可变参数函数-C++编译器的匹配调用优先级1.重载函数2.函数模板3.变参函数 #include <iostream> #include <string> using namespace std; class Test { p 阅读全文
posted @ 2019-12-11 22:10 一代枭雄 阅读(808) 评论(0) 推荐(0)
摘要:C++中如何得到动态类型? #include <iostream> #include <string> using namespace std; class Base { public: virtual string type() { return "Base"; } }; class Derive 阅读全文
posted @ 2019-12-11 21:32 一代枭雄 阅读(217) 评论(0) 推荐(0)
摘要:array.h HeapArray.h 阅读全文
posted @ 2019-12-09 22:42 一代枭雄 阅读(195) 评论(0) 推荐(0)
摘要:为什么要在catch中重新抛出异常? 阅读全文
posted @ 2019-12-09 22:31 一代枭雄 阅读(335) 评论(0) 推荐(0)
摘要:C++内置了异常处理的语法元素try... catch ...-try语句处理正常代码逻辑-catch语句处理异常情况-try语句中的异常由对应的catch语句处理 C++通过throw语句抛出异常信息 C++异常处理分析-throw抛出的异常必须被catch处理 当前函数能够处理异常,程序继续往下 阅读全文
posted @ 2019-12-09 21:49 一代枭雄 阅读(333) 评论(0) 推荐(0)
摘要:异常的概念-程序在运行过程中可能产生异常-异常(Exception)与Bug的区别 异常是程序运行时可预料的执行分支 Bug是程序中的错误,是不被预期的运行方式 异常(Exception)和Bug的对比-异常 运行时产生除0的情况 需要打开的外部文件不存在 数组访问时越界-Bug 使用野指针 堆数组 阅读全文
posted @ 2019-12-09 21:11 一代枭雄 阅读(554) 评论(0) 推荐(0)