通过整理头文件,梳理了一步一步的依赖关系,如下图
层级 | 类 |
---|---|
第八层 | unordered_map.h、unordered_set.h |
第七层 | 、、、、、、 |
第六层 | 、basic_string.h、、、rb_tree.h、 |
第五层 | |
第四层 | 、 |
第三层 | 、、heap_algo.h、、set_algo.h |
第二层 | 、 |
第一层 | 、、type_traits.h |
底层 | cstddef、ctime、cstring、new、iostream、initializer_list、stdexcept、cassert、cstdlib、climits、type_traits、 |
// 这个头文件包含了 mystl 的一系列算法
#include <cstddef>
#include <ctime>
#include ""
#include ""
#include "heap_algo.h"
#include ""
// 这个头文件包含了 mystl 的基本算法
#include <cstring>
#include ""
#include ""
// 这个头文件包含了 mystl 的所有算法,包括基本算法,数值算法,heap 算法,set 算法和其他算法
#include ""
#include ""
#include "set_algo.h"
#include "heap_algo.h"
#include ""
// 这个头文件包含一个类 alloc,用于分配和回收内存,以内存池的方式实现
//
// 从 v2.0.0 版本开始,将不再使用内存池,这个文件将被弃用,但暂时保留
//
// 注意!!!
// 我知道这个文件里很多实现是错的,这是很久很久前写的了,后面已经不用这个东西了,
// 所以我也没再维护,有诸多问题,已经有人在issue中都提了,free_list的修改,
// 指针作为参数时没实际修改到原指针,等等。相信会看这么仔细的,大部分都是
// 初学C++的朋友,大佬都不会看这些玩具了,所以其中的错误,就留给对内存池实现
// 感兴趣的朋友去修改啦!
#include <new>
#include <cstddef>
#include <cstdio>
// 这个头文件包含一个模板类 allocator,用于管理内存的分配、释放,对象的构造、析构
#include ""
#include ""
// 定义了 string, wstring, u16string, u32string 类型
#include "basic_string.h"
basic_string.h
// 这个头文件包含一个模板类 basic_string
// 用于表示字符串类型
#include <iostream>
#include ""
#include ""
#include ""
#include ""
// 这个头文件包含两个函数 construct,destroy
// construct : 负责对象的构造
// destroy : 负责对象的析构
#include <new>
#include "type_traits.h"
#include ""
// 这个头文件包含了一个模板类 deque
// deque: 双端队列
// notes:
//
// 异常保证:
// mystl::deque 满足基本异常保证,部分函数无异常保证,并对以下等函数做强异常安全保证:
// * emplace_front
// * emplace_back
// * emplace
// * push_front
// * push_back
// * insert
#include <initializer_list>
#include ""
#include ""
#include ""
#include ""
#include <stdexcept>
#include <cassert>
// 这个头文件包含了 mystl 的函数对象与哈希函数
#include <cstddef>
// 这个头文件包含了一个模板类 hashtable
// hashtable : 哈希表,使用开链法处理冲突
#include <initializer_list>
#include ""
#include ""
#include ""
#include ""
#include ""
#include ""
heap_algo.h
// 这个头文件包含 heap 的四个算法 : push_heap, pop_heap, sort_heap, make_heap
#include ""
// 这个头文件用于迭代器设计,包含了一些模板结构体与全局函数,
#include <cstddef>
#include "type_traits.h"
// 这个头文件包含了一个模板类 list
// list : 双向链表
// notes:
//
// 异常保证:
// mystl::list 满足基本异常保证,部分函数无异常保证,并对以下等函数做强异常安全保证:
// * emplace_front
// * emplace_back
// * emplace
// * push_front
// * push_back
// * insert
#include <initializer_list>
#include ""
#include ""
#include ""
#include ""
#include ""
// 这个头文件包含了两个模板类 map 和 multimap
// map : 映射,元素具有键值和实值,会根据键值大小自动排序,键值不允许重复
// multimap : 映射,元素具有键值和实值,会根据键值大小自动排序,键值允许重复
// notes:
//
// 异常保证:
// mystl::map<Key, T> / mystl::multimap<Key, T> 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert
#include "rb_tree.h"
// 这个头文件负责更高级的动态内存管理
// 包含一些基本函数、空间配置器、未初始化的储存空间管理,以及一个模板类 auto_ptr
#include <cstddef>
#include <cstdlib>
#include <climits>
#include ""
#include ""
#include ""
#include ""
// 这个头文件包含了 mystl 的数值算法
#include ""
// 这个头文件包含了两个模板类 queue 和 priority_queue
// queue : 队列
// priority_queue : 优先队列
#include ""
#include ""
#include ""
#include "heap_algo.h"
rb_tree.h
// 这个头文件包含一个模板类 rb_tree
// rb_tree : 红黑树
#include <initializer_list>
#include <cassert>
#include ""
#include ""
#include ""
#include "type_traits.h"
#include ""
set_algo.h
// 这个头文件包含 set 的四种算法: union, intersection, difference, symmetric_difference
// 所有函数都要求序列有序
#include ""
#include ""
// 这个头文件包含两个模板类 set 和 multiset
// set : 集合,键值即实值,集合内元素会自动排序,键值不允许重复
// multiset : 集合,键值即实值,集合内元素会自动排序,键值允许重复
// notes:
//
// 异常保证:
// mystl::set / mystl::multiset 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert
#include "rb_tree.h"
// 这个头文件包含了一个模板类 stack
// stack : 栈
#include ""
type_traits.h
// 这个头文件用于提取类型信息
#include <type_traits>
// 这个头文件用于对未初始化空间构造元素
#include ""
#include ""
#include ""
#include "type_traits.h"
#include ""
unordered_map.h
// 这个头文件包含两个模板类 unordered_map 和 unordered_multimap
// 功能与用法与 map 和 multimap 类似,不同的是使用 hashtable 作为底层实现机制,容器内的元素不会自动排序
// notes:
//
// 异常保证:
// mystl::unordered_map<Key, T> / mystl::unordered_multimap<Key, T> 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert
#include ""
unordered_set.h
// 这个头文件包含两个模板类 unordered_set 和 unordered_multiset
// 功能与用法与 set 和 multiset 类似,不同的是使用 hashtable 作为底层实现机制,容器中的元素不会自动排序
// notes:
//
// 异常保证:
// mystl::unordered_set / mystl::unordered_multiset 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert
#include ""
// 这个文件包含一些通用工具,包括 move, forward, swap 等函数,以及 pair 等
#include <cstddef>
#include "type_traits.h"
// 这个头文件包含一个模板类 vector
// vector : 向量
// notes:
//
// 异常保证:
// mystl::vecotr 满足基本异常保证,部分函数无异常保证,并对以下函数做强异常安全保证:
// * emplace
// * emplace_back
// * push_back
// 当 std::is_nothrow_move_assignable::value == true 时,以下函数也满足强异常保证:
// * reserve
// * resize
// * insert
#include <initializer_list>
#include ""
#include ""
#include ""
#include ""
学习中。。。再来写心得