MyTinySTL学习

通过整理头文件,梳理了一步一步的依赖关系,如下图

层级
第八层unordered_map.h、unordered_set.h
第七层algorithm.h、astring.h、hashtable.h、map.h、queue.h、set.h、stack.h
第六层algo.h、basic_string.h、deque.h、lish.h、rb_tree.h、vector.h
第五层memory.h
第四层allocator.h、uninitialized.h
第三层algobase.h、construct.h、heap_algo.h、numeric.h、set_algo.h
第二层iterator.h、util.h
第一层exceptdef.h、functional.h、type_traits.h
底层cstddef、ctime、cstring、new、iostream、initializer_list、stdexcept、cassert、cstdlib、climits、type_traits、
algo.h

// 这个头文件包含了 mystl 的一系列算法


#include <cstddef>
#include <ctime>

#include "algobase.h"
#include "memory.h"
#include "heap_algo.h"
#include "functional.h"
algobase.h

// 这个头文件包含了 mystl 的基本算法

#include <cstring>

#include "iterator.h"
#include "util.h"
algorithm.h

// 这个头文件包含了 mystl 的所有算法,包括基本算法,数值算法,heap 算法,set 算法和其他算法

#include "algobase.h"
#include "algo.h"
#include "set_algo.h"
#include "heap_algo.h"
#include "numeric.h"
alloc.h

// 这个头文件包含一个类 alloc,用于分配和回收内存,以内存池的方式实现
//
// 从 v2.0.0 版本开始,将不再使用内存池,这个文件将被弃用,但暂时保留
//
// 注意!!!
// 我知道这个文件里很多实现是错的,这是很久很久前写的了,后面已经不用这个东西了,
// 所以我也没再维护,有诸多问题,已经有人在issue中都提了,free_list的修改,
// 指针作为参数时没实际修改到原指针,等等。相信会看这么仔细的,大部分都是
// 初学C++的朋友,大佬都不会看这些玩具了,所以其中的错误,就留给对内存池实现
// 感兴趣的朋友去修改啦!

#include <new>

#include <cstddef>
#include <cstdio>
allocator.h

// 这个头文件包含一个模板类 allocator,用于管理内存的分配、释放,对象的构造、析构

#include "construct.h"
#include "util.h"
astring.h

// 定义了 string, wstring, u16string, u32string 类型

#include "basic_string.h"
basic_string.h

// 这个头文件包含一个模板类 basic_string
// 用于表示字符串类型

#include <iostream>

#include "iterator.h"
#include "memory.h"
#include "functional.h"
#include "exceptdef.h"
construct.h

// 这个头文件包含两个函数 construct,destroy
// construct : 负责对象的构造
// destroy : 负责对象的析构

#include <new>

#include "type_traits.h"
#include "iterator.h"
deque.h

// 这个头文件包含了一个模板类 deque
// deque: 双端队列

// notes:
//
// 异常保证:
// mystl::deque 满足基本异常保证,部分函数无异常保证,并对以下等函数做强异常安全保证:
// * emplace_front
// * emplace_back
// * emplace
// * push_front
// * push_back
// * insert

#include <initializer_list>

#include "iterator.h"
#include "memory.h"
#include "util.h"
#include "exceptdef.h"
exceptdef.h
#include <stdexcept>

#include <cassert>
functional.h

// 这个头文件包含了 mystl 的函数对象与哈希函数

#include <cstddef>
hashtable.h

// 这个头文件包含了一个模板类 hashtable
// hashtable : 哈希表,使用开链法处理冲突

#include <initializer_list>

#include "algo.h"
#include "functional.h"
#include "memory.h"
#include "vector.h"
#include "util.h"
#include "exceptdef.h"
heap_algo.h

// 这个头文件包含 heap 的四个算法 : push_heap, pop_heap, sort_heap, make_heap

#include "iterator.h"
iterator.h

// 这个头文件用于迭代器设计,包含了一些模板结构体与全局函数,

#include <cstddef>

#include "type_traits.h"
list.h

// 这个头文件包含了一个模板类 list
// list : 双向链表

// notes:
//
// 异常保证:
// mystl::list 满足基本异常保证,部分函数无异常保证,并对以下等函数做强异常安全保证:
// * emplace_front
// * emplace_back
// * emplace
// * push_front
// * push_back
// * insert

#include <initializer_list>

#include "iterator.h"
#include "memory.h"
#include "functional.h"
#include "util.h"
#include "exceptdef.h"
map.h

// 这个头文件包含了两个模板类 map 和 multimap
// map : 映射,元素具有键值和实值,会根据键值大小自动排序,键值不允许重复
// multimap : 映射,元素具有键值和实值,会根据键值大小自动排序,键值允许重复

// notes:
//
// 异常保证:
// mystl::map<Key, T> / mystl::multimap<Key, T> 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert

#include "rb_tree.h"
memory.h

// 这个头文件负责更高级的动态内存管理
// 包含一些基本函数、空间配置器、未初始化的储存空间管理,以及一个模板类 auto_ptr

#include <cstddef>
#include <cstdlib>
#include <climits>

#include "algobase.h"
#include "allocator.h"
#include "construct.h"
#include "uninitialized.h"
numeric.h

// 这个头文件包含了 mystl 的数值算法

#include "iterator.h"
queue.h

// 这个头文件包含了两个模板类 queue 和 priority_queue
// queue : 队列
// priority_queue : 优先队列

#include "deque.h"
#include "vector.h"
#include "functional.h"
#include "heap_algo.h"
rb_tree.h

// 这个头文件包含一个模板类 rb_tree
// rb_tree : 红黑树

#include <initializer_list>

#include <cassert>

#include "functional.h"
#include "iterator.h"
#include "memory.h"
#include "type_traits.h"
#include "exceptdef.h"
set_algo.h

// 这个头文件包含 set 的四种算法: union, intersection, difference, symmetric_difference
// 所有函数都要求序列有序

#include "algobase.h"
#include "iterator.h"
set.h

// 这个头文件包含两个模板类 set 和 multiset
// set : 集合,键值即实值,集合内元素会自动排序,键值不允许重复
// multiset : 集合,键值即实值,集合内元素会自动排序,键值允许重复

// notes:
//
// 异常保证:
// mystl::set / mystl::multiset 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert

#include "rb_tree.h"
stack.h

// 这个头文件包含了一个模板类 stack
// stack : 栈

#include "deque.h"  
type_traits.h

// 这个头文件用于提取类型信息

#include <type_traits>
uninitialized.h

// 这个头文件用于对未初始化空间构造元素

#include "algobase.h"
#include "construct.h"
#include "iterator.h"
#include "type_traits.h"
#include "util.h"
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 "hashtable.h"
unordered_set.h

// 这个头文件包含两个模板类 unordered_set 和 unordered_multiset
// 功能与用法与 set 和 multiset 类似,不同的是使用 hashtable 作为底层实现机制,容器中的元素不会自动排序

// notes:
//
// 异常保证:
// mystl::unordered_set / mystl::unordered_multiset 满足基本异常保证,对以下等函数做强异常安全保证:
// * emplace
// * emplace_hint
// * insert

#include "hashtable.h"
util.h

// 这个文件包含一些通用工具,包括 move, forward, swap 等函数,以及 pair 等

#include <cstddef>

#include "type_traits.h"
vector.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 "iterator.h"
#include "memory.h"
#include "util.h"
#include "exceptdef.h"

学习中。。。再来写心得

  • 1
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

可峰科技

生活不易

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值