C++_List_调用及模拟实现
【本节目标】1. list的介绍及使用2. list的深度剖析及模拟实现3. list与vector的对比1.List的介绍及使用1.1 初始List1.2 reverse1.3 基于iterator迭代的分类1.4 sort输出结果1.5 对比_STL中vector和List的排序效率示例输出结果总结我们从排序时间上可以看出链表确实是不适合排序的即便从链表导出到顺序表排序完后再导入回来在时间上依旧和链表排序相差无几所以后续如果需要存储有序的数据还是顺序表更为合理。1.6 splice示例输出结果引言基于我们前面学习以及模拟实现的数据结构所以在STL_list中我们将不会过多使用成员函数下面就直接开始模拟实现STL_list。2. list的深度剖析及模拟实现链表节点类的准备2.1 list类_声明2.2 模拟实现_empty_init()2.3 模拟实现_构造函数2.4 模拟实现_push_back()基于insert()写法2.5 模拟实现_基于Insert()的push_front()2.6 模式实现_基于erase()的pop_back()2.7 模式实现_基于erase()的pop_front()2.8 模拟实现_clear()2.9 模拟实现_析构函数2.10 模拟实现_const和非const_begin()2.10.1 非const_begin()2.10.2 const_begin()2.11 模拟实现_const和非const_end()2.11.1 非const_end()2.11.2 const_end()2.12 模拟实现_基于list_node类的const和非const的迭代器_list_iterator类以及_list_const_iterator类2.12.1 _list_iterator实现效果2.12.2 _list_const_iterator实现效果2.12.3 将const和非const合并避免冗余在list模板类下对于**_list_iterator模板类**的typedef合并实现2.13 模拟实现_insert()2.14 模拟实现_erase()2.15 模拟实现_拷贝构造函数注意非const类可以调用const及非const成员函数2.16 模拟实现_operator()示例2.17 拓展区分拷贝构造函数和赋值重载拷贝初始化 vs 赋值运算符的调用时机拷贝初始化如Type obj expr;发生在对象创建时用一个已有对象初始化新对象。此时编译器会优先调用 拷贝构造函数如果存在而非赋值运算符。例如listint lt2 lt;是在创建 lt2 时用lt初始化它属于拷贝初始化。赋值操作如obj expr;发生在对象已经存在后将一个已有对象的值赋给另一个已存在的对象。此时调用赋值运算符operator。例如lt2 lt;假设lt2已经被构造过才会调用赋值运算符。2.18 模拟实现_swap()基于swap()实现赋值重载2.19 模拟实现_size()2.20 模拟实现_基于自定义类型作为数据实现插入与遍历但是这样的写法与我们封装的理念不太一样所以我们通用operator-实现输出。2.20.1 模拟实现_operator-示例但是这里产生了问题按我们的理解it-_A1应该返回的是成员结构体的地址为什么就能达到输出数据的效果了呢个人的写法其实本来是要写出it--_A1这样才能输出数据但是由于可读性较差所以编译器特殊处理省略了一个-。后面的成员函数其实和前面vector、string基本一致所以也就不往下面写了交给各位根据前面的内容自由发挥。本章完~