摘要: 多个智能指针指向同一片堆空间的需求是巨大的。 计数变量也是在堆空间里面定义的,它的生命周期和对象的生命周期相同。 添加SharedPointer.h文件: 测试程序如下: 运行结果如下: 第二个测试程序: 结果如下: 一个堆空间被三个指针指向,最终只释放一次。 编译警告: 提示我们要在SharedP 阅读全文
posted @ 2018-09-15 23:16 周伯通789 阅读(285) 评论(0) 推荐(0)
摘要: 思考: 使用智能指针替换单链表LinkLIst中的原生指针是否可行? 将LinkList.h中的Node指针全部改成智能指针: 测试程序如下: 运行结果如下: 程序直接崩溃了。 我们的SmartPointer设计中,一片堆空间最多只能由一个指针标识,但是我们设计的和遍历有关的函数,例如move、en 阅读全文
posted @ 2018-09-15 20:51 周伯通789 阅读(355) 评论(0) 推荐(0)
摘要: 问题1: glibc中的strdup实现如下: 没有对参数s进行空指针判断。 我们的Exception.cpp中应做改进: 在第12行进行判断空指针操作。 问题2: t1在析构时会抛出异常,我们在remove一个对象时,要保证链表还是合法的,也就是保证异常安全性。 如上图,我们期望打印的链表长度为2 阅读全文
posted @ 2018-09-15 17:02 周伯通789 阅读(590) 评论(0) 推荐(0)
摘要: 对于自定义对象,我们可以重载普通new操作符,这时候使用new Test()时就会调用到我们重载的普通new操作符。 示例程序: 执行结果如下: 调用placement new,程序如下: 编译结果如下: 提示我们没有对应的函数,也就是placement new没有重载。 更改程序: 结果如下: 再 阅读全文
posted @ 2018-09-15 16:46 周伯通789 阅读(1292) 评论(0) 推荐(1)
摘要: 静态单链表是一种新的数据结构类型。 我们往线性表中添加的元素的个数是固定的,例如最大100个。 只是这100个元素会经常的变动。 这时候是顺序表还是单链表合适呢? 显然是单链表,但是单链表也有问题。 缺陷: 解决方案: 我们在顺序表的内部预留了空间,这片空间用来增加删除数据元素。配合单链表就形成了静 阅读全文
posted @ 2018-09-15 14:41 周伯通789 阅读(390) 评论(0) 推荐(0)
摘要: 问题: 如何遍历单链表中的每一个元素? 示例: 在头部插入元素时,时间复杂度是O(n)。 获取元素时,时间复杂度是O(n*n),因为内层定位位置时有一个O(n)复杂度。 从理论上来说遍历一个单链表,只需要线性的时间就够了。 设计思路: 提供一组相关的遍历函数,遍历时使用这些函数来操作: move函数 阅读全文
posted @ 2018-09-15 13:28 周伯通789 阅读(455) 评论(0) 推荐(0)
摘要: 问题: 如何判断某个数据元素是否存在于线性表中? 查找一个元素是否在线性表中,每次查找就需要使用for循环,因此,我们需要封装一个find成员函数。 在List.h中添加find函数: SeqList.h中添加find的实现: LinkList.h中添加find的实现: 测试程序如下: 运行结果: 阅读全文
posted @ 2018-09-15 11:36 周伯通789 阅读(239) 评论(0) 推荐(0)
摘要: 本节目标: 添加LinkList.h文件: 第110行的get是const函数,116行我们取m_header的指针,这时编译器会认为我们要改变m_header,编译会报错,因此,我们在第20行给m_header这个变量加上mutable属性。 测试程序如下: 运行结果如下: get函数的使用不是很 阅读全文
posted @ 2018-09-15 10:11 周伯通789 阅读(356) 评论(0) 推荐(0)