![](https://img-blog.csdnimg.cn/20201014180756913.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
STL
文章平均质量分 91
YoungYangD
喜欢读书、旅行的小男生,梦想是贩卖二手阳光。
展开
-
C++ STL(第一篇:概述)
STL是Stander Temple Library(标准模板库)的简称。它是一套功能强大的C++模板类,提供了通用的模板类和函数,这些模板类和函数可以实现多种流行的常用的算法和数据结构。STL提供了六大组件,彼此可以组合套用:容器:各种数据结构,如vector、list、deque、set、map。用来存放数据。算法:各种常见算法,如sort、search、copy、erase…迭代器...原创 2019-01-21 19:49:43 · 515 阅读 · 0 评论 -
C++ STL(第十四篇:Set 和 Map)
1、Setset 的特性是,所有元素都会根据元素的键值自动被排序。set 的元素不像 map 那样可以同时拥有实值(value)和键值(key),set 元素的键值就是实值,实值就是键值。 set 不允许两个元素有相同的键值。因为 set 元素值就是其键值,关系到 set 元素的排列规则,如果任意改变 set 元素值,会严重破坏 set 组织。所以 set 的迭代器是 const_iterat...原创 2019-04-17 20:20:19 · 393 阅读 · 0 评论 -
C++ STL(第十八篇:算法-- copy)
1、copy算法不管在什么地方,copy() 都是一个常常被调用的函数。copy操作不外乎运用 赋值操作 或 拷贝构造 来进行,但是某些元素能够使用内存直接复制行为,能够提高效率,节省时间。copy() 算法可将输入区间 [first, last) 内的元素赋值到输出区间 [result, result+(last-first)) 内。copy 算法用了各种办法来提高效率,包括函数重载、型别特...原创 2019-04-26 20:51:07 · 1755 阅读 · 0 评论 -
C++ STL(第二十篇:算法-- 排序)
1、概述排序算法是算法中的重点,排序过的数据,特别容易查找,不管是实际工作还是面试都会用到它。现实生活中,字典需要排序,书籍索引需要排序,磁盘目录需要排序,名片需要排序等等。任何数据只要你想快速查找,就需要进行排序。排序算法有很多种,比如冒泡排序、选择排序、插入排序、快速排序、堆排序。其中堆排序我们在整理 heap 时已经进行整理了,今天主要是对 STL 中的 sort 排序进行整理。而 s...原创 2019-05-01 18:25:33 · 1113 阅读 · 2 评论 -
C++ STL(第十六篇:容器的总结)
1、总结到这里,对于STL的容器就整理完成了。我们把容器分为了 序列式容器 和 关联式容器,而每类下面又分为好多容器,如下图所示:其中,有一些容器需要基于特定的结构或算法,如 priority-queue,set,map,hash_set;还有一些容器是对底层容器接口的修改,如 stack、queue。之前我只是整理了,他们的原理和代码,其实还差一些他们之间的比较及使用细节,这一节给补上。...原创 2019-04-23 20:34:39 · 323 阅读 · 0 评论 -
C++ STL(第十七篇:算法)
1、算法的概述算法,就是一个问题的解法。以有限的步骤,解决逻辑或数学上的问题。STL 收录了极具复用价值的 70 第一个 算法,包括和赫赫有名的排序、查找、排列、组合等。有的算法需要搭配特定的数据结构。例如 binary search tree(二叉查找树)和 RB-tree 便是为了解决查找问题而发展出来的特殊数据结构,hashtable 拥有快速查找的能力。map-heap可以协助完成所谓...原创 2019-04-25 21:18:41 · 471 阅读 · 0 评论 -
C++ STL(第十五篇:hashtable)
1、hashtablehashtable 的目的是为了提供任何操作都是常数级别。SGI STL 中, hash table 使用了 开链法 实现的。大致的意思如下图所示:hash table 内的元素为 桶子(bucket),每个桶子里面有很多节点。其实有点像我们前面整理的 deque(双端队列),双端队列主控是个指向指针的指针,而hash table是一个vector;双端队列缓冲区是一块...原创 2019-04-19 21:08:50 · 10639 阅读 · 0 评论 -
C++ STL(第十九篇:算法-- set相关算法)
1、概述STL 一共提供了四种与set相关的算法,分别是并集、交集、差集、对称差集。所谓set,可细分为数学上的定义和STL 的定义两种,数学上的感谢大家,我是假装很努力的YoungYangD(小羊)。参考资料:《STL源码剖析》...原创 2019-04-30 09:24:38 · 459 阅读 · 0 评论 -
C++ STL(第二十一篇:算法-- 应用于有序区间的算法)
1、概述有序区间,顾名思义就是区间内的元素都是经过排序之后的。对于这种类型的区间,有一系列的算法。今天就对这种区间的算法进行整理。2、includes判断序列 S2 是否 “涵盖于” 序列 S1,所谓涵盖,意思是 “S2 的每一个元素都出现于 S1”。代码如下:template<class InputIterator1, class InputIterator2>bool i...原创 2019-05-05 20:15:49 · 562 阅读 · 0 评论 -
C++ STL(第二十二篇:算法-- 单纯的数据处理算法)
1、概述前面整理了 STL 最重要的 排序算法,以及 有序区间算法,还有copy、及简单的算术算法等。但是 STL 还有一些单纯的数据处理算法,接下来两节会对这部分内容进行整理。部分算法比较简单,就不整理代码了,只做一个简单的介绍。2、数据处理算法adjacent_find:找出第一组满足条件的相邻元素。默认条件是“两元素相等”,可传入自定义二元仿函数。count:统计在 [first, ...原创 2019-05-08 19:14:06 · 305 阅读 · 0 评论 -
C++ STL(第二十三篇:算法-- 单纯的数据处理算法)
1、概述前面整理了 STL 单纯的数据处理算法,因为太多,分为两个部分,今天就把剩余的部分给整理完毕,这样 STL 的内容就告一段落了。rotate:将 [first, middle) 内的元素和 [middle, last) 内的元素互换。 middle 所指的元素会成为容器的第一个元素。如果有个数字序列 {1,2,3,4,5,6,7},对元素 3 做旋转操作,会形成{3,4,5,6,7,1...原创 2019-05-09 20:34:18 · 234 阅读 · 0 评论 -
C++ STL(第十三篇:RB-tree)
1、概述RB-tree(红黑树) 是除了 AVL-tree 之外,另一个被广泛使用的平衡二叉搜索树。所谓 RB-tree,不仅是一个二叉搜索树,而且必须满足以下规则:1、每个节点不是红色就是黑色。2、根节点为黑色。3、如果节点为红,其子节点必须为黑。4、任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同。根据规则4,新增节点必须为红;根据规则3,新增节点之父节点必须为黑。当...原创 2019-04-16 20:53:07 · 3339 阅读 · 1 评论 -
C++ STL(第十二篇:容器--关联式容器介绍和树的导览)
1、关联式容器前面刚开始整理 STL 容器 时,简单的说了一下容器可以分为两类 序列式容器 和 关联式容器。前面又对主要的 序列式容器 进行了整理,今天终于轮到 关联式容器了。所谓关联式容器,观念上类似关联式数据库:每笔数据都有一个键值(key)和一个实值(value)。当元素插入到关联式容器中时,容器内部结构便依照其键值大小,以某种特定规则将这个元素放置于适当位置。关联式容器没有所谓头尾(只...原创 2019-04-13 14:38:12 · 1058 阅读 · 0 评论 -
C++ STL(第八篇:容器 -- deque)
1、deque的概述deque(双端队列)是由 一段一段的定量连续空间构成。一旦有必要在 deque 的前端或尾端增加新空间,便配置一段定量连续空间,串接在整个deque的头端或尾端。 deque 的最大任务,便是在这些分段的定量连续空间上,维护其整体连续的假象,并提供随机存取的接口。为了维持 deque 整体连续的假象,deque 数据结构的设计及迭代器前进后退等操作都颇为繁琐。deque的...原创 2019-04-08 20:46:34 · 528 阅读 · 0 评论 -
C++ STL(第三篇:空间配置器)
1、概述以STL运用的角度而言,空间配置器是最不需要介绍的,它总是藏在一切组件的背后,默默工作。整个STL的操作对象都存放在容器之中(vertor、list),而容器一定需要配置空间以放置资料,这就是空间配置器的作用。虽然STL提供了让我们自定义空间配置器的接口,但是不建议自己定义,因为标准提供的空间配置器是安全的,且效率也不错的。所以我们使用时,一般都会使用默认的配置器。如下:templa...原创 2019-03-23 18:55:49 · 2582 阅读 · 0 评论 -
C++ STL(第四篇:适配器)
1、概述配接器在STL组件中,扮演者轴承、转换器的角色。Adapter这个概念,事实上是一种设计模式。定义如下:将一个class 的接口转换为另一个 class 的接口,使原本因接口不兼容而不能合作的 class,可以一起运作。STL所提供的配接器,可以分为三类:1、容器适配器,改变容器的接口2、迭代器适配器,改变迭代器的接口3、仿函数适配器,改变仿函数的接口2、容器适配器STL提供...原创 2019-03-23 20:04:41 · 2461 阅读 · 0 评论 -
C++ STL(第五篇:迭代器)
1、概述迭代器实际上是一种设计模式,定义如下:提供一种方法,使之能够依序巡访某个聚合物所含的各个元素,而又无需暴露该聚合物的内部表述方式。STL的中心思想在于:将数据容器和算法分开,彼此独立设计,在通过一种胶合剂将它们撮合在一起。而迭代器就是这个胶合剂。迭代器是一种行为类似指针的对象,最重要的编程工作就是对 operator* 和 operator-> 进行重载。2、迭代器分类迭代...原创 2019-03-27 20:26:12 · 375 阅读 · 0 评论 -
C++ STL(第十篇:heap)
1、heap的概述heap(堆)并不归属于 STL 容器组件,它是个幕后英雄,扮演 priority queue(优先队列)的助手。priority queue 允许用户以任何次序将任何元素推入容器,但取出时一定是从优先权最高的元素开始取。而 binary max heap(最大二叉堆)具有这样的特性,适合作为 priority queue 的底层机制。 因为后面要整理 priority que...原创 2019-04-11 21:01:32 · 4662 阅读 · 1 评论 -
C++ STL(第六篇:容器--vector)
1、概述今天开始整理STL使用最广的容器了。同时这一部分也是我看了两遍,还有很多没有看懂的地方。最近准备硬着头皮,把这个山头给拿下,争取在第三遍能看懂吧。容器,置物之所也。STL容器实际上就是把一些常用的数据结构给实现出来,方便大家使用。而常用的数据结构不外乎array、list、tree、stack、queue、hash table、set、map…等等。根据 “数据在容器中的排列” 特性...原创 2019-04-01 21:15:23 · 389 阅读 · 0 评论 -
C++ STL(第二篇:仿函数)
1、概述前面我简单的整理了STL的概述,便一直对STL没有在进行整理。其主要原因是STL的源码实在是太深奥了,我的微末道行,还不能完全的看明白,虽然我已经看了两遍,但是掌握的程度是在是让人汗颜。今天整理呢,就是觉得不能因为难就不前进了,困难还是要克服的,想当初看《深入了解计算机系统》也很痛苦,看完之后感觉自己重新认识了计算机。整理呢也不是全部一口气整理,我会循序渐进,先易后难。2、仿函数定义及...原创 2019-03-22 20:50:47 · 667 阅读 · 0 评论 -
C++ STL(第七篇:容器 -- list)
1、list的概述相比较于 vector 的连续线型空间,list 就显得复杂的多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。list 和 vector 是两个最常用被使用的容器 。什么时机下最适合使用哪一种容器,我们最后进行整理。list 本身和 lis...原创 2019-04-02 21:03:20 · 329 阅读 · 0 评论 -
C++ STL(第十一篇:priority-queue)
priority-queue(优先队列)是一个拥有权值概念的 queue,它允许加入新元素、移除旧元素、审视元素值等功能。由于这是一个 queue,所以只允许在低端加入元素,并从顶端取出元素,除此之外别无其他存取元素的路径。priority-queue 带有权值观念,其内的元素并非依照被推入的次序排列,而是自动依照元素的权值排列。权值最高者,排在最前面。缺省的情况下,priority-queu...原创 2019-04-12 20:00:06 · 388 阅读 · 0 评论 -
C++ STL(第九篇:容器 -- stack和queue)
1、stackstack是一种先进后出的数据结构(也就是我们说的 栈)。它只有一个出口,允许新增元素、移除元素、取得最顶端元素。除了最顶端外,没有任何其它方法可以存取 stack 的其它元素。换言之, stack 不允许有遍历行为。SGI STL中 stack 底层是使用deque(双端队列)进行实现的。我们之间整理STL 适配器的时候也说过,这种修改某物接口,形成另一种风貌的性质叫做“适配器...原创 2019-04-09 19:12:40 · 705 阅读 · 0 评论 -
C++ STL 总结
1、STL 总结经过这么长时间的整理,STL 的内容终于整理完毕,虽然之前这本书看过两遍,但是比较汗颜的是,感觉之前也就是看过,没有进行深度挖掘,对于一些概念已经淡化,对于一些实现细节也已经淡化。所以说看书一定要往深度里看,看懂了才能印象深刻,而且还要不定时的回顾一下,增强一下记忆。这里个人总结一下看完STL的感受:STL 主要的特性是,泛型思想。书写的代码与数据类型无关,任何类型的数据都可使...原创 2019-05-14 22:51:37 · 568 阅读 · 0 评论