
STL源码剖析学习笔记
文章平均质量分 97
Still_Believe_
爱好编程C++,Java,Python。g
ithub主页:https://github.com/klc407073648
C++全栈知识体系网站:https://stibel.icu
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
《STL源码剖析》学习笔记——第八章:配接器
1. 配接器概述 配接器(adapters)在 STL 组件的灵活组合运用功能上,扮演着轴承、转换器的角色。Adapter 这个概念,事实上是一种设计模式。《Design Patterns》一书提到 23 个最普及的设计模式,其中对 adapter 样式的定义如下:将一个 class 的接口转换为另一个 class 的接口,使原本因接口不兼容而不能合作的 classes,可以一起运作。 配接器之概观与分类 STL 所提供的各种配接器中,改变容器(containers)接口者,我们称为 containe原创 2020-11-18 08:00:36 · 291 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第七章:仿函数
目录 1. 仿函数概述 2. 算术类仿函数 3. 关系运算类仿函数 4. 逻辑运算类仿函数 5. 证同、选择、投射 1. 仿函数概述 仿函数也叫作函数对象,是一种具有函数特质的对象,调用者可以像函数一样地调用这些对象,被调用者则以对象所定义的function call operator扮演函数的实质角色。就实现观点而言,仿函数其实上就是一个“行为类似函数”的对象。为了“行为类似函数”,其类别定义中必须自定义function call 运算子(operator())。STL中仿函数代...原创 2020-11-15 22:43:00 · 284 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第六章:算法之set
set相关算法 STL提供了四种与set相关的算法,分别是并集(union)、交集(intersection)、差集(difference)和对称差集(symmetric difference),这4个算法接受的set必须是有序区间,都至少接受4个参数,分别表示两个set区间。所谓的set可细分为数学上的定义和STL的定义两种,数学上的set允许元素重复而未经排序,;例如{1,5,5,3,2},STL的定义要求元素不得重复,且必须经过排序,例如{1,3,5,6}。 测试程序如下: #include原创 2020-11-15 11:11:59 · 172 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第六章:算法
1. 算法概观 算法,问题之解法也。以有限的步骤,解决逻辑或数学上的问题,这一专门科目称为算法。STL 正是将极具复用价值的算法进行封装,包含sort,find,copy等函数。 1.1STL算法总览 所有的STL算法都作用在迭代器 [first,last) 所标出来的区间上。根据是否改变操作对象的值,可以分为 质变算法(mutating algorithms)和 非质变算法 (nomutating algorithms)。 质变算法,是指运算过程中会更改区间内元素的内容的算法。比如,拷贝(cop.原创 2020-11-15 10:30:29 · 231 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第五章:关联式容器 hashtable
目录 1. hashtable概述 2. hashtable的迭代器 3. hashtable的操作 3.1 构造函数 3.2 析构函数 3.3 插入元素 3.3.1 insert_unique 3.3.2 insert_equal 3.4 删除元素 1. hashtable概述 hashtable在插入,删除,搜寻等操作上具有"常数平均时间"的表现,而且这种表现以统计为基础,不依赖输入元素的随机性。(二叉搜索树具有对数平均时间的表现,是建立在输入数据有足够随机性的基础上。) has原创 2020-11-12 08:15:40 · 397 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第五章:关联式容器 set和 map
目录 1. set概述 1.1 set测试程序 1.2multiset 2. map概述 2.1 map测试程序 2.2multiset 1. set概述 set的特性是,所有元素都会根据元素的键值自动排序,set的元素不像map那样可以同时拥有实值和键值,set元素的键值就是实值,实值就是键值,且不允许两个元素有相同的键值。set具有以下特点: 不能通过set的迭代器改变set的元素,setiterators是一种constant iterators。 客户端对set进行元素新增...原创 2020-11-11 08:17:50 · 308 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第五章:关联式容器 RB-tree
目录 1. RB-tree概述 2. RB-tree节点设计 3. RB-tree数据结构 4. RB-tree的构造与内存管理 5. RB-tree的元素操作 1. RB-tree概述 首先介绍一下基本概念,二叉树:任何节点最多只有两个子节点,这两个子节点分别称为左子节点和右子节点。二叉搜索树:任何节点的键值一定大于其左子树中的每一个节点的键值,小于其右子树中的每一个节点的键值。所谓的RB-tree不仅是二叉搜索树,而且必须满足以下规则: 每个节点不是红色就是黑色。 根节点为黑色。 .原创 2020-11-10 07:51:53 · 264 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 slist
目录 1. slist概述 2. slist的节点 3. slist的迭代器 4. slist的数据结构 5. slist的测试实例 1. slist概述 SGI STL另提供一个单向链表slist。slist和list的主要差别在于,前者的迭代器属于单向的Forward Iterator,后者的迭代器属于双向的BidirectionalIterator。根据STL的习惯,插入操作会将新元素插入于指定位置之前。作为单向链表,slist没有任何方便的方法可以回头定出前一个位置,因此它必须从头找起原创 2020-11-09 08:08:52 · 255 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 priority_queue
目录 1. priority_queue概述 2. priority_queue 完整定义 3.priority_queue测试实例 1. priority_queue概述 priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能.只允许在尾部加入元素,并从头部取出元素,除此之外别无其他存取元素的途径。priority_queue缺省情况下是以vector为底层容器,再加上max-heap处理规则,STL priority_queue往往不被归类.原创 2020-11-08 21:33:16 · 266 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 heap
目录 1. heap概述 2. heap算法 2.1push_heap算法 2.2 pop_heap 2.3sort_heap 2.4make_heap 3. heap测试实例 1. heap概述 heap并不归属于STL容器组件,扮演priority queue的助手,binary max heap适合作为priority queue的底层机制,priority queue允许用户以任意次序将元素推入容器,但是取出是一定是优先权最高(数值最高)的元素先出来。binary heap是...原创 2020-11-08 21:20:18 · 355 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 stack和queue
目录 1. stack 1.1 stack概述 1.2 stack 完整定义 1.3 以list作为stack的底部容器 2. queue 2.1 queue概述 2.2 queue 完整定义 2.3 以list作为queue的底部容器 1. stack 1.1 stack概述 stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口。stack允许新增元素,移除元素、取得最顶端元素,但不允许有遍历行为。由于stack系以底部容器完成其所有工作原创 2020-11-07 08:56:52 · 258 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 deque
目录 1. deque概述 2. deque的中控器 3. deque的迭代器 4. deque的数据结构 5. deque的构造与内存管理 6. deque的元素操作 1. deque概述 deque(double-ended queue,双端队列)是一种具有队列和栈的性质的数据结构。相比于vector单向开口的连续线性空间而言,deque则是一种双向开口的连续线性空间,可以在头尾两端分别做元素的插入和删除操作。虽然vector从技术层面也可以对头部操作,但是效率极低。即deque与vec原创 2020-11-07 08:25:40 · 246 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 list
目录 1. list概述 2. list的迭代器 3.list的数据结构 4. list的构造与内存管理 5. list元素操作 1. list概述 相比于vector的连续线性空间,list显得更为复杂;但list每次插入或删除一个元素时,就将配置或释放一个元素。因此,list对于空间的运用有绝对的精准,一点也不浪费。对于任何位置的插入或元素删除,list永远是常数时间。 list的节点 下面是STL list的节点结构,显然是一个双向链表。 template <class..原创 2020-11-06 08:15:31 · 277 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第四章:序列式容器 vector
目录 1.容器的概观与分类 2.vector概述 2.1vector 的迭代器 2.2vector数据结构 2.3 vector构造与内存管理 2.4 vector的元素操作 1.容器的概观与分类 容器,置物之所也。研究数据的特定排列方式,以利于搜寻或排序或其他特殊目的,这一专门学科称为数据结构。几乎可以说,任何特定的数据结构都是为了实现某种特定的算法。 SGI STL的各个容器(本图以内缩方式来表达基层与衍生层的关系)。这里所谓的,并非派生关系,而是内含关系。例如,heap内含一..原创 2020-11-04 22:26:02 · 385 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第二章:空间配置器
1. 空间配置器概述 从STL的实现角度来看,空间配置器的位置尤为重要,整个STL的操作对象(所有的数值)都是存放在容器之内,而容器一定需要配置空间以存放资料。空间配置器就是为各个容器提供高效的管理空间。SGI STL的配置器与众不同,也与标准规范不同,其名称为alloc而非allocator,而且不接受任何参数。 不能采用标准写法: vector<int,std::allocator<int>> iv; // inv VC or CB 应该写成: vector<int原创 2020-11-02 08:18:26 · 387 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第三章:迭代器(iterators)概念与traits编程技法(二)
目录 1.迭代器相应型别分析 1.1迭代器相应型别之一:value type 1.2迭代器相应型别之二:difference type 1.3迭代器相应型别之三:reference type 1.4迭代器相应型别之四:pointer type 1.5迭代器相应型别之五:iterator_category 2.std::iterator的保证 3. SGI STL的私房菜:__type_traits 1.迭代器相应型别分析 template <class I...原创 2020-11-01 16:36:10 · 544 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第三章:迭代器(iterators)概念与traits编程技法(一)
迭代器概述 Iterator是一种抽象的设计概念《Design Patterns》其中对于iterator模式定义如下:提供一种方法,使之能够依序巡访某个聚合物(容器)所包含的各个元素,而又无需暴露该聚合物的内部表达方式。 STL的中心思想在于:将数据容器(containers)和算法(algorithms)分开彼此独立设计,最后再以一贴粘合剂将其撮合。这个粘合剂就是Iterator。迭代器是一种类似指针的对象,最重要的便是对operator *和operator ->进行重载,为了让迭代器适用于原创 2020-11-01 11:50:54 · 312 阅读 · 0 评论 -
《STL源码剖析》学习笔记——第一章:STL概论和版本简介
目录 1. STL概述 2. STL六大组件的交互关系 3. stl_config.h中的各种组态 1. STL概述 软件界一直期望建立一种可重复运用的方法,使得工程师、程序员不必困于重复编写前人已经编写过的源码,STL应运而生。它建立了数据结构和算法的一套标准,且各组件之间低耦合、独立性高。STL所实现的,是依据泛型思维架设起来的一个概念结构,这个以抽象概念为主题而非以实际类为主体的结构,形成了一个严谨的接口标准,在此接口下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以所谓适配器.原创 2020-10-31 11:14:27 · 482 阅读 · 0 评论