STL学习
南山喃.plus
这个作者很懒,什么都没留下…
展开
-
C++STL概述
#STL(标准模板库)也是泛型程序库,是先辈建立的一种可重复使用的东西,以及一种得以制造出“可重复运用的东西”的方法,从子程序、程序、函数、类别、到函数库、类别库、各种组件,从结构化设计、模块化设计、面对对象设计,到模式的归纳整理为的就是复用性的提升。为了建立数据结构和算法的一套标准,并且降低其间的耦合关系,以提升各自的独立性、弹性、交互操作性而诞生了STL。##STL6大组件 功能与应用...原创 2019-07-15 16:29:40 · 253 阅读 · 0 评论 -
STL关联式容器之multimap
multimap的特性以及用法与map完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制RB-tree的insert_equal()而非insert_unique().下面是multimap的源码摘要,只列出了与set不同之处:template<calss Key, calss T,class Compare=less<Key>,class Alloc=a...原创 2019-08-02 14:47:14 · 124 阅读 · 0 评论 -
STL关联式容器之multiset
multiset概述multiset的特性以及用法与set完全相同,唯一的差别在于它允许键值重复,因此它的插入操作采用的是底层机制RB-tree的insert_equal()而非insert_unique().下面是multiset的源码摘要,只列出了与set不同之处:template <calss Key, class Compare=less<Key>, class Al...原创 2019-08-02 14:31:36 · 103 阅读 · 0 评论 -
STL关联式容器之map
map概述map的特性是,所有元素都会根据元素的键值自动被排序。map的所有元素都是pari,同时拥有实值(value)和键值(key)。pari的第一元素被视为键值,第二元素被视为实值。map不允许两个元素拥有相同的键值。下面是<stl_pari.h>中的pari定义:template<calss T1,class T2>struct pari{ typ...原创 2019-08-01 18:17:53 · 123 阅读 · 0 评论 -
STL关联式容器之RB-tree(红黑树)(一)
RB-tree(红黑树)AVL-tree之外,另一个颇具历史并被广泛运用的平衡二叉搜索树是RB-tree(红黑树),所谓RB-tree,不仅是一个二叉搜索树,且必须满足以下规则:每个节点不是红色就是黑色(图中深色底纹代表黑色,浅色底纹代表红色,下同);根节点为黑色;如果节点为红色,其子节点必须为黑色;任一节点到null(树尾端)的任何路径,所含的黑色节点数必须相同。根据规则4,新增节...原创 2019-07-27 14:32:07 · 147 阅读 · 0 评论 -
STL序列式容器之queue
queue概述queue是一种先进先出的数据结构。它有两个出口,允许新增元素、移除元素、从底端加入元素、取得最顶端元素。但除了最低端可以取出外,没有任何其它方法可以存取queue的其它元素。换言之,queue不允许有遍历行为。将元素推入queue的操作称为push,将元素推出queue的操作称为pop。queue定义完整列表以某种既有容器为底部结构,将其接口改变,使其符合“先进先出”的特...原创 2019-07-22 18:18:18 · 216 阅读 · 0 评论 -
STL序列式容器之stack
stack概述stack是一种先进后出的数据结构。它只有一个出口,如下图所示,stack允许新增元素、移除元素、取得最顶端元素。取得最顶端元素。但除了最顶端外,没有任何其它方法可以存取stack的其它元素。换言之,stack不允许具有遍历的行为。将元素推入stack的操作称为push,将元素推出stack的草操作称为pop.stack定义完整列表以某种既有容器作为底部结构,将接口改变,使之...原创 2019-07-21 17:57:45 · 285 阅读 · 0 评论 -
STL关联式容器(二)
平衡二叉搜索树也许因为输入值不够随机,也许因为经过某些插入或删除操作,二叉搜索树可能会失去平衡造成搜寻效率低落的情况:所谓树形平衡与否,并没有一个绝对的标准。“平衡”的大致意义是:没有任何一个节点过深或深度过大。不同的平衡条件,造成不同的效率表现,以及不同的实现复杂度。有数种特殊结构如AVL-tree、RB-tree、AA-tree,均可实现出平衡二叉搜索树,它们都比一般的(无法绝对维持平衡...原创 2019-07-25 16:58:33 · 132 阅读 · 0 评论 -
STL之关联式容器set
set概述set的特性是,所有的元素都会根据元素的键值自动被排序。set的元素不像map那样可以同时拥有实值和键值,set元素的键值就是实值,实值就是键值。set不允许两个元素有相同的键值。我们不可以通过set的迭代器改变元素的值,因为set元素值就是其键值,关系到set元素的排列规则。如果任意改变set元素值,会严重破坏set组织。稍后在源码中会看到set::iterator被定义为底层RB...原创 2019-07-30 16:32:49 · 107 阅读 · 0 评论 -
STL序列式容器之deque
deque概述vector是单向开口的连续线性空间,deque则是一种双向开口的连续线性空间。所谓双向开口,意思是可以在头尾两端分别做元素的插入和删除操作。vector当然也可以在头尾两端分别做元素的插入删除操作(从技术上说),但是其头部操作效率极差而无法被接受。deque和vector的最大差异,一是在于deque允许于常数时间内对起头端进元素的插入或移除操作,二在于deque没有所谓容量...原创 2019-07-20 19:18:39 · 217 阅读 · 0 评论 -
STL之关联式容器(一)
关联式容器所谓关联式容器,观念上类似关联式数据库(实则更为简单):每笔数据或每个元素都有一个键值(key)和一个实值(value)。当元素被插入到关联式容器中时,容器内部结构(可能RB-tree,也可能是hash-table)便依照其键值大小,某种特定的规则将这个元素放置于适当的位置。关联式容器没有所谓的头尾,只有最大和最小元素,所以不会有所谓push_back()、push_front()、p...原创 2019-07-24 19:29:05 · 253 阅读 · 0 评论 -
STL之RB红黑树(二)
RB-tree的节点设计RB-tree有红黑二色,并且拥有左右子节点,我们很容易就可以勾勒出其结构风貌。以下是SGI STL的实现代码。为了有更大的弹性,节点分为两层:从以下的minimum()和maximum()函数可清楚看出,RB-tree作为一个二叉搜索树,其极致是多么容易找到。由于RB-tree的各种操作时常需要上溯其父节点,所以特别在数据结构中安排了一个parent指针。typede...原创 2019-07-29 12:41:30 · 126 阅读 · 0 评论 -
STL序列式容器之List
LIST概述相对于vector的连续性空间,list就要复杂的多,它的好处是每次插入或删除一个元素,就配置或释放一个元素空间。因此,list对于空间的运用有绝对的精准性,一点也不浪费。而且,对于任何位置的元素插入或元素移除,list永远是常数时间。list和vector是两个最常被使用的容器,什么情况下最适合使用哪一种容器,就要看元素的多或寡,元素的构造复杂度以及元素的存取行为的特性而定。L...原创 2019-07-17 13:26:19 · 178 阅读 · 0 评论 -
STL序列式容器之vector
序列式容器所谓序列式容器:可序列集群,其中的元素都可序,但未必有序。vector概述vector的数据安排以及操作方式,与array非常相似。两者的唯一差别在于空间的运用的灵话性,array 是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,可以,一切琐细得由客户端自己来:首先配置一块新空间, 然后将元素从旧址搬往新址, 再把原来的空间释还给系统。 vector 是动态空间,随着...原创 2019-07-16 13:21:40 · 212 阅读 · 0 评论 -
STL关联式容器之hashtable(前言)
摘要我们前面介绍了所谓的二叉搜索树和平衡二叉搜索树,还有一种被广泛使用的平衡二叉搜索树——RB-tree(红黑树),红黑树不仅在树形的平衡上表现不错,在效率表现和实现复杂度上也保持相当的“平衡”,所以被广泛使用,也因此成为STL set和map的标准底层机制。二叉搜索树具有对数平均时间(longarithmic average time)的表现,但这样的变现构造在一个假设上:输入数据有足够的随...原创 2019-08-09 12:58:58 · 137 阅读 · 0 评论