STL源码与实现
文章平均质量分 77
meeiuliuus
真理无穷,进一步有进一步的欢喜
展开
-
【C++】STL源码阅读+模拟实现全流程记录
NOTE]转眼间4月已经一周过去了,回想起本系列的第一个博客 vector的使用和源码解析 已经是3月中旬的文章,不得不感慨时间飞逝。尤其是在这个阶段,2024年秋天,我将踏上残酷的秋招战场,与全国各大顶尖高效的学生甚至一些海外的留学生一起竞争那不知所剩有几的校招岗位,我不禁也开始感到紧张和焦虑。但这种情况下,为什么我还要花这将近20天的时间去看STL的源码呢?去花费大量的时间去模拟实现?我有时也会这样问自己是否值得?原创 2024-04-08 19:48:10 · 745 阅读 · 1 评论 -
【C++】set map模拟实现
map和set底层都是使用的红黑树,但是上层的接口有一些不同。像map的话是靠key获得value,而set因为key和value是相同的,所以涉及到value的操作全都等同于key,比如find。所以需要对红黑树加一层封装。原创 2024-04-07 22:13:20 · 290 阅读 · 0 评论 -
【C++】set map的使用和源码解析
NOTE] 先看前文set map底层采用的是红黑树作为底层数据结构,因此插入删除查询的时间复杂度都为O(logN),其中红黑树又是一种平衡二叉搜索树,因此要想看得懂本章,需要先了解一下二叉搜索树,AVLTree和红黑树。原创 2024-04-06 23:20:41 · 778 阅读 · 0 评论 -
【C++】红黑树学习 + 实现
_kv(kv),_col(RED){}可以看到,相比于AVL树,红黑树节点的定义唯一的变化是平衡因子变成了表达红色黑色性质的两个节点RED,BLACK,且默认节点为红色。原创 2024-04-06 18:18:56 · 863 阅读 · 0 评论 -
【C++】AVL树学习 + 模拟实现
平衡二叉树-Bilibili视频所谓AVL树是在二叉树基础上改进而来的树,本质上是一颗二叉搜索树,但比二叉搜索树多了一个特性——平衡性[[【C++】 二叉搜索树复习+模拟实现]|二叉搜索树]] 有个很大问题是,如果插入的元素单调递增,那么二叉搜索树就会退化成链表,查询的时间复杂度就会退化成O(N),为了解决这个问题,我们给每个二叉搜索树添加平衡因子,根据平衡因子对不平衡的树进行处理,使其满足二叉搜索树性质的同时,成为一颗平衡的树。INFO] 什么是平衡。原创 2024-04-05 18:23:14 · 792 阅读 · 0 评论 -
【C++】 二叉搜索树复习+模拟实现
Note] 最近把笔记软件改成了obsidian了,也是一个朋友给我推荐的。语雀其实挺好用的,但是感觉obsidian的上限更高,并且在看了卡片盒笔记法后,我觉得知识是要成网络的。而语雀没有这样的能力,obsidian的网络节点功能能更好地帮我梳理知识点之间的关系。好的工具是大脑的延申嘛人总是要不断地踏出舒适圈,才能得到最快地提升,包括后面我可能去练习一下vim的操作,不过那是后话了~今天我们来看一下二叉搜索树,作为学习map/set的前置知识。原创 2024-04-04 18:26:05 · 549 阅读 · 0 评论 -
【C++】stack/queue模拟实现
上一章【C++】stack/queue/priority_queue使用和源码解析-CSDN博客看了源码,今天来模拟实现一下;原创 2024-03-30 16:14:41 · 204 阅读 · 0 评论 -
【C++】stack/queue/priority_queue使用和源码解析
今天晚上七点本来有携程的笔试,结果我忘记了,晚上回来之后就洗澡洗袜子之类的搞到7点40,我看下一场的时间是4月16日,估计到那个时候携程也没什么hc了吧。算了,长个教训吧,以后要善用手机的日历,闹钟功能。不说这些,今天来看stack/queue的源码~在前面几篇博客中,我们用的vector,list,deque都是底层容器。而今天的stack/queue是容器适配器,区别是:容器适配器是实际上是在底层容器的基础上提供特定的接口的封装。比如栈stack是双端队列实现的,只能后进先出。原创 2024-03-28 21:33:05 · 671 阅读 · 0 评论 -
【C++】deque的使用和源码解析
这周开始实习了,白天的时间都要花在实习上,所以自己学习的时间就变少了很多。目前我还没有想到很好的平衡实习与自己学习的办法,原本计划的在四月份之前看完STL的主要容器和容器适配器的任务也不知道能不能完成,3月29号是周五,还有一个周末,目前今晚不管睡多晚,我都一定把deque看完。看明天后天两天能不能把stack/queue给看了,这个周末就隔离一切干扰,把AVLTree和RBTree给搞懂,可以的话自己写一写map和set,四月份再制定新计划了~——2024年3月27日。原创 2024-03-27 22:47:31 · 637 阅读 · 0 评论 -
【C++】my list模拟实现
感觉STL 的list中很多成员函数就是Leetcode上关于链表的一些题,而哨兵节点的思想对于一些需要双向链表的题也很好用,比如LRU算法;anyway,看源码还是能学到很多东西的;原创 2024-03-19 20:59:10 · 278 阅读 · 0 评论 -
【C++】list的使用和源码解析
感觉得加快进度了,就不一个一个自己写list的使用了;直接将常用的从官方文档复制下来,等后面自己实现的时候直接写吧。原创 2024-03-19 17:23:20 · 290 阅读 · 0 评论 -
【C++】my vector模拟实现
今天来模拟一下vector的基础功能,尤其是我们刷算法题常用的那些;比如什么size() begin() end() []操作符等等,实现的时候,我会先将函数的名字声明写上,先不写定义;然后再关掉所有资料和源码,纯靠自己的理解来实现一遍,这样对个人的提升应该是最大的。否则的话看着vector源码写也失去了意义,毕竟vector的内容并不复杂;最复杂的部分也不过涉及push_back的扩容机制。话不多说,开始写~原创 2024-03-18 19:35:37 · 737 阅读 · 2 评论 -
【C++】Vector的使用和源码解析
其实很早之前,我就有去看STL源码的想法了。只是一直没有一个好的机会。最久空闲时间比较多,也正是这样一个好机会去阅读源码。为了事半功倍,不走弯路,我在网上查了很多资料。目前来说,C++ STL的源码相关的中文书籍还停留在侯捷老师的2002年出版的STL源码剖析。虽然侯捷老师确实是非常厉害的,很有教学能力的一位C++老师,但是还是要提,在计算机技术日新月异的环境下,一本二十多年前的书籍确实已经有点落后了。原创 2024-03-17 22:53:59 · 1005 阅读 · 1 评论