STL源码剖析学习
Dream_yz
没有最好,只有更好!
展开
-
STL组件简介
STL六大组件1)容器:各种数据结构,如vector,list,deque,set,map,用来存放数据。从实现角度来看,STL容器是一种class template。就体积而言,这一部分很像冰山在海面下的比率。2)算法:如各种常用算法如,sort,search,copy,erase…。从实现角度来看,STL算法是一种function template。3)迭代器:扮演容器与算法之间的胶合剂,是所谓原创 2016-03-16 19:38:17 · 622 阅读 · 0 评论 -
STL学习——Slist篇
STL学习——Slist篇简介STL中List是双向链表,而Slist是单向链表。它们的区别:Slist的迭代器是单向的Forward Iterator,而list的迭代器是双向的Bidirectional Iterator。Slist所耗用的空间更小,操作更快。它们共同的特点是,插入、移除、接合等操作并不会造成原有的迭代器失效。slist插入时,需要从前遍历,找到插入点的位置。为了更快插入,提供原创 2016-05-07 10:32:05 · 2451 阅读 · 0 评论 -
STL学习——Hashtable篇
STL学习——Hashtable篇概述hash table(散列表)是一种在插入,删除,搜索等操作“常数平均时间”完成的数据结构。它是一种字典结构。哈希函数是一种映射函数,它能够将大数映射为小数。负责将某一元素映射为一个“大小可接受之索引”。哈希函数使用过程中可能会出现不同的元素被映射到相同的位置(相同的索引),称为哈希碰撞。解决哈希碰撞的方法:线性探测,二次探测,开链等等。负载系统:指元素个数除原创 2016-05-07 14:22:16 · 3837 阅读 · 0 评论 -
STL学习——RB-tree篇
STL学习——RB-tree篇简介RB-tree(红黑树)是一棵平衡二叉搜索树,它需要满足以下规则:1)每个节点不是红色就是黑色;2)根节点为黑色;3)如果节点为红,其子节点必须为黑;4)任一节点至NULL(树尾端)的任何路径,所含之黑节点数必须相同。插入依据红黑树的性质4)可以,在红黑树中插入节点,新插入的节点必须为红。插入节点后,可能会破坏红黑树的性质,此时需调整红黑树节点颜色或者旋转红黑树原创 2016-05-07 16:36:53 · 4189 阅读 · 1 评论 -
STL学习——set/map/multiset/mulitmap篇
STL学习——set/map/multiset/mulitmap篇set简介set特性:所有元素都会根据元素的键值自动被排序。set的元素不想map那么,可以同时拥有实值(value)和键值(key),set元素的键值就是实值,实值就是键值。set中不允许两个元素具有相同的键值。因为set元素值就是键值,其关系到set元素的排列规则,如果任意改变set元素值,则会破坏set的组织,故不可以通过se原创 2016-05-07 17:38:13 · 1263 阅读 · 0 评论 -
STL学习——hash_set/hash_map/hash_multiset/hash_multimap篇
STL学习_hash_set/hash_map/hash_multiset/hash_multimap篇hash_set与hash_multiset简介hash_set是以hashtable为底层机制实现的。故对hash_set的各种操作可以转调用hashtable来实现。hash_set与set的不同:1)hash_set的底层机制是hashtable,而set的底层机制是RB-tree;2)s原创 2016-05-07 20:30:26 · 990 阅读 · 0 评论 -
Effective STL条款
Effective STL条款容器仔细选择你的容器 vector、deque和list之间选择的指导方案: vector、list和deque提供给程序员不同的复杂度,因此应该这么用: vector是一种可以默认使用的序列类型,当很频繁地对序列中部进行插入和删除时应该用list,当大部分插入和删除发生在序列的头或尾时可以选择deque这种数据结构。小心对“容器无关代码”的幻想使容原创 2016-07-16 10:12:17 · 1471 阅读 · 0 评论 -
STL容器vector使用
STL容器vector使用vector利用动态数组实现。vector中主要涉及的操作函数如下:构造、拷贝和析构操作 vector c:产生一个空vector,其中没有任何元素。 vector c1(c2):产生另一个同型vector的副本(所有元素都被拷贝) vector c(n):利用元素的default构造函数生成一个大小为n的vector vector c(n, ele原创 2016-08-07 15:24:14 · 740 阅读 · 0 评论 -
STL容器deque使用
STL容器deque使用deque简介deque与vector非常相似。它也采用动态数组来管理元素,提供随机存取,并有着和vector几乎一模一样的接口。不同的是deque的动态数组头尾都开放,因此能在头尾两端进行快速安插和删除。与vector相比,deque功能上的不同在于: 两端都能快速安插元素和移除元素(vector只在尾端插入)。这些操作可以在分期摊还的常数时间内完成。 存取元素时原创 2016-08-07 15:55:55 · 864 阅读 · 0 评论 -
STL容器lists使用
STL容器lists使用简介list使用双向链表来管理元素。list内部结构与vector和deque截然不同,主要体现在以下几个主要方面,其区别如下: lists不支持随机存取。如果要读取某个元素,需要从头顺序遍历元素,找到对应位置,然后进行读取。 任何位置上(不只是两端)执行元素的安插和一尺都非常快,始终都是常数时间内完成,因为无需移动任何其它元素。实际上内部只是进行一些指针操作。原创 2016-08-07 17:15:10 · 715 阅读 · 0 评论 -
STL容器Set和Multisets使用
STL容器Set和Multisets使用简介set和multiset会根据特定的排序准则,自动将元素排序。两者不同指出是multisets允许元素重复而sets不允许。它们通常都是以平衡二叉树实现的。注意:由于set和multiset是自动排序的,故不能直接改变元素值,因为这样会打乱原本正确的顺序。故要改变元素值,必须先删除旧元素,再插入新元素。其提供的接口反映了这种行为: sets和multi原创 2016-08-07 18:12:27 · 907 阅读 · 2 评论 -
STL容器Maps和Multimaps使用
STL容器Maps和Multimaps使用简介map和multimap将key/value pair(键值/实值 对组)当做元素,进行管理。他们可根据key的排序准则自动将元素排序。multimaps允许重复元素,maps不允许。map和multimap的元素型别key和T,必须满足以下两个条件: key/value必须具备assignable(可赋值的)和copyable(可复制的)性质。原创 2016-08-07 19:52:57 · 835 阅读 · 4 评论 -
C++标准库中Strings字符串使用
C++标准库中Strings字符串使用字符串操作函数 构造函数:产生或复制字符串 析构函数:销毁字符串 =,assign():赋以新值 swap():交换两个字符串的内容 +=,append(),push_back():添加字符 insert():插入字符 erase():删除字符 clear():移除全部字符(使之为空) resize():改变原创 2016-08-08 16:41:06 · 903 阅读 · 0 评论 -
STL学习——Priority_queue篇
STL学习——Priority_queue篇概述priority_queue是一个拥有权值观念的queue,它允许加入新元素,移除旧元素,审视元素值等功能。因为它是queue,故只允许底端加入元素,顶端取出元素。priorit_queue内元素并非依照被推入的次序排列,而是依照元素权值排列。权值最高者,排在最前面。实现priority_queue利用max_heap和vector表现的完全二叉树原创 2016-05-06 23:10:02 · 3012 阅读 · 0 评论 -
STL学习——Stack/Queue篇
STL学习——Stack/Queue篇Stack概述stack是一种先进先出的数据结构,只有一个出口,stack允许新增元素,移除元素,取得最顶端元素。但除了最顶端外,没有任何办法可以存取stack其他元素。即不允许遍历行为。实现stack实现是以容器为底部结构的,将容器的接口改变,使其符合“先进先出”特性,便形成了一个栈。具体实现可以将底部deque的头端开口封闭,便实现了stack。因为st原创 2016-05-06 22:37:01 · 1022 阅读 · 0 评论 -
STL学习——Deque篇
STL学习——Deque篇deque概述deque是一种双向开口的连续线性空间。双向开口指可以在头尾两端分别做元素的插入和删除操作。虽然vector也可以在头尾两端进行操作,但是其头部操作效率极差,无法被接受。deque与vector最大差异:1)deque允许于常数时间内对起头端进行元素的插入或移除操作;2)deque没有所谓的容量概念,因为它是动态地以分段连续空间组合而成,随时可以增加一段新的原创 2016-05-06 22:10:40 · 1929 阅读 · 0 评论 -
STL-序列式容器
STL_序列式容器所谓序列式容器,其中的元素都可序,但未必有序。C++语言本身提供一个序列式容器array。STL提供vector、list、deque、stack、queue、priority-queue等等。vectorvector的数据安排和操作与array非常相似。两者区别在于空间的运用的灵活性。array是静态空间,一旦配置了就不能改变;要换个大(或小)一点的房子,一切琐细得由客户端自己来原创 2016-03-13 16:30:54 · 1141 阅读 · 0 评论 -
STL-关联式容器
STL——关联式容器容器分类:序列式和关联式两种。序列式:array(数组)、vector(向量)、heap(堆)、priority-queue(优先级队列)、deque(双端队列)、slist、list(链表)、stack(堆栈)、queue(队列)、关联式::set(集合)、map(映射表)、multiset(多键集合)、multimap(多键映射表)。底层实现机制为RB-tree(红黑树)。扩原创 2016-03-12 16:13:09 · 1105 阅读 · 0 评论 -
STL算法_基本算法篇
STL算法_基本算法1)equal算法:用来比较两个序列在[first,last)区间内是否相等。如果第二个序列的元素多于第一个序列元素,则多出的元素不予考虑。// equal算法用来判断两个序列在[frist,last)区间内是否相等。当第二个序列的元素较多时,多出来的元素不予考虑。// 版本1template <class _InputIter1, class _InputIter2>in原创 2016-05-01 20:17:23 · 4549 阅读 · 1 评论 -
STL算法_set相关算法篇
STL算法_set相关算法set相关算法所接受的set,必须是有序区间,元素值可以重复出现。1)set_union算法:可构造S1,S2之并集。即构造出S1并S2,此集合内含S1或S2内的每一个元素。S1、S2及其并集都是以排序区间表示。返回值是一个迭代器,指向输出区间的尾端。它是一种稳定操作,其输入区间内的每个元素的相对顺序不会改变。因S1和S2元素不唯一,如果某个值在S1中出现n次,在S2中出现原创 2016-05-01 21:27:23 · 4322 阅读 · 0 评论 -
STL算法_数值算法篇
STL算法_数值篇1)accumulate算法:用来计算初始值init和[first,last)内所有元素的总和。// 计算init和[first,last)内所有元素的总和// 版本1template <class _InputIterator, class _Tp>_Tp accumulate(_InputIterator __first, _InputIterator __last, _原创 2016-05-01 19:41:48 · 1115 阅读 · 0 评论 -
STL算法_heap算法篇
STL算法_heap算法篇堆简介二叉堆是一种完全二叉树,即整棵二叉树中除了最底层的叶子节点之外,其余节点是填满的,而最底层的叶子节点由左到右也是填满的不能存在空隙。堆主要包括两类:大顶堆和小顶堆。大顶堆指每个节点的键值(key)都大于或等于其叶子节点的键值,而小顶堆指每个节点键值都小于等于其节点的键值。STL中堆主要使用vector/array实现的。大顶堆的最大值在根节点,故其总是位于底层的ve原创 2016-05-01 22:32:12 · 1559 阅读 · 0 评论 -
STL算法_sort算法篇
STL算法_sort算法篇简介sort算法接受两个RandomAccessIterators(随机存取迭代器),然后将区间内的所有元素以渐增方式由小到大重新排序。STL中的关系型容器都拥有自动排序功能(底层使用RB-tree实现),不需要用到sort算法。至于序列式容器中的stack、queue和priority-queue都有特别的出入口,不允许用户对元素排序。剩下vector、deque和li原创 2016-05-01 23:17:10 · 5056 阅读 · 1 评论 -
STL学习_仿函数篇
STL学习_仿函数篇简介仿函数,实质是函数对象,是一种具有函数特质的对象。对调用者,它可以像函数一样地被调用;对被调用者,它可以以对象所定义的function call operator扮演函数的实质决策。STL算法中,很多算法的实现都是基于两种版本:版本一表现出最常用(最直观)的某种运算;版本二表现出最泛化的演算流程,允许用户“以template参数来指定所要采取的策略”。版本二是可以允许用户原创 2016-05-02 17:58:21 · 3842 阅读 · 0 评论 -
STL学习_配接器篇
STL学习_配接器篇定义配接器(Adapter)在STL组件的灵活组合运用功能上,扮演着轴承、转换器的角色。它事实上是一种设计模式。即将一个class的接口转换为另一个class的接口,使原本因接口不兼容而不能合作的classes,可以一起运作。分类STL所提供的各种适配器中,改变仿函数(functors)接口者,称为function adapter;改变容器(containers)接口者,称为原创 2016-05-02 22:18:21 · 4770 阅读 · 0 评论 -
STL-算法总结
STL——算法简介算法:有限的步骤,解决逻辑或数学上的问题。唯有用来解决特定问题(如排序、查找、最短路径、三点共线、…),并且获取数学上的效能分析与证明,这样的算法才具有可复用性。STL中算法主要包括:排序、查找、排列组合算法等,以及用于数据移动、复制、删除、比较、组合、运算等等的算法。特定算法对应特定数据结构:二叉查找树和红黑树主要是为了解决查找问题而发展出来的特殊数据结构;散列表拥有快速查找的能原创 2016-03-13 22:53:08 · 3844 阅读 · 0 评论 -
STL学习——Vector篇
STL学习——Vector篇vector简介vector的数据安排及操作方式与array非常相似,两者的区别在于空间运用的灵活性。array是静态空间,一旦配置了,就不能改变;要换个大(或小)一点的可以,但琐碎的事由客户端完成:首先配置一块新空间,然后将元素从旧址一一搬往新址,再把原来的空间释还给系统。而vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。它对内存的合理原创 2016-05-05 22:32:25 · 3893 阅读 · 0 评论 -
STL学习_List篇
STL学习——List篇简介List与Vector不同,它不使用连续空间,而是每次插入或删除一个元素,就配置或释放一个元素空间。故list对空间的使用精准,不浪费任何空间。list对任何位置的元素插入或删除,常数时间完成。 List与Vector的使用,视元素的多少,元素的构造复杂度,元素存取行为的特性而定。List节点List本身与List节点不同,List是一个双向的链表。其节点信息如下:原创 2016-05-06 12:47:54 · 938 阅读 · 0 评论 -
STL算法使用
STL算法使用非变动性算法非变动算法既不改动元素次序,也不改动元素值。它通过Input迭代器和forward迭代器完成工作,故可作用于所有标准容器上。 for_each():对每个元素执行某操作 count():返回元素个数 count_if():返回满足某一准则条件的元素个数 min_element():返回最小值元素(以一个迭代器表示) max_element()原创 2016-08-08 19:24:51 · 633 阅读 · 0 评论