
STL源码剖析
Cry .
当你的能力配得上你的野心、梦想的时候,运气自然就会来了。
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
STL源码剖析之slist
我们都知道list的底层实现是双向链表,今天我们就讲一讲底层为单向链表的slist,其实现比较简单。 listnode.h template<typename T> struct ListNode { T value; ListNode<T>* next; public: ListNode(const T _value) :valu...原创 2020-02-07 09:37:23 · 259 阅读 · 0 评论 -
STL源码剖析之stack
大家知道在程序设计里面,哪种数据结构使用率最高呢?答案是:栈。为什么呢?因为程序设计里面会存在的大量的函数调用,而函数的调用实质是使用了栈。今天就让我们来了解一下栈的底层实现吧~ 栈是一种先进后出的数据结构,它只有一个出口,因此它允许在最顶端增加元素和删除元素。所以栈是不存在迭代器的,也就是说栈不存在遍历行为啦。 由于栈以底部的某个容器完成其所有的工作,所以我们可以把栈理解为“修改某数据结构的...原创 2020-02-02 20:04:30 · 285 阅读 · 0 评论 -
STL源码剖析之deque
前面我们讲过,vector的底层是连续线性存储的,其是动态的分配内存空间的,而vector只支持尾端的插入和删除操作。有没有一种数据结构首尾都支持插入和删除的的操作呢?当然有啊~ 就是deque(双端队列)。deque是一种双向开口的连续线性空间,所谓双向开口,意思是可以在头尾两端进行插入和删除的操作。 deque和vector的最大差异在于deque允许于常数时间内对首尾两端进行插入和删除,还...原创 2020-02-02 09:46:41 · 242 阅读 · 0 评论 -
STL源码剖析之list
先前我们讲过vector是连续线性存储的,其访问元素的时间复杂度是,但是插入或者删除元素的时间复杂度是,所以其插入或者删除的效率比价低。有什么容器的插入或者删除的效率是常数时间呢? 有啊~~ 就是list。list的每次插入或者删除元素时,配置或者释放一个内存空间,其时间复杂度永远是。现在就让我们来了解一下list的底层实现吧。 首先让我们来看一下list的节点。 template<t...原创 2020-02-01 18:34:00 · 218 阅读 · 0 评论 -
STL源码剖析之vector
容器vector的底层实现是由数组(连续的线性空间)实现的,veector是动态分配内存空间的,也就是说,随着元素的加入,它的内部机制会自行扩充空间以便于容纳新元素。因此vector的底层实现技术的核心是对大小的控制以及重新分配内存空间时对数据的移动效率。因为vector的底层实现是由数组来实现的,所以vector的迭代器就是原生指针。vector的简单实现如下: 我把迭代器的内嵌的相应的型别封...原创 2020-01-30 10:50:38 · 241 阅读 · 0 评论 -
STL 源码剖析——内存基本处理工具
STL定义有五个全局函数,这五个函数分别是construct(),destory(),uninitialized_copy(),uninitialized_fill(),uninitialized_fill_n(),都作用与未初始化的内存空间上。 首先让我们了解下用与构造对象和析构对象的基本工具:construct()和destory()。 construct()为对象开辟内存空间。其接受两个...原创 2019-07-11 20:49:53 · 177 阅读 · 0 评论