STL
文章平均质量分 84
何以慰風塵
本愿一心向胡马,奈何胡马奔沟渠
展开
-
STL 空间分配器(二)
三.内存的分配与释放3.1概述 SGI STL中设计了两层配置器,分别负责配置不同大小的内存区,当请求内存大于128bytes时采用第一级配置器,直接调用malloc()与free().,而当请求内存小于128bytes时采用第二级配置器,其中使用了一种类似于buddy算法(但简单很多)的方式进行内存分配。 不论是一级还是二级配置器都不接受任何templ...原创 2018-10-18 10:56:34 · 684 阅读 · 0 评论 -
STL 基本算法
一.比较区间函数equal 该函数用于判断两个指定区间内的数据是否相等,若第二个区间较长,则多处部分不予考虑,因此,若要保证两个序列相等则应先判断其元素个数是否相同。其实现较简单,没有过多好说的。 二.填充函数fill,fill_n1.函数概述 fill函数使用指定值填充目标区间,其填充过程是通过调用赋值运算符来进行的,fill_n与fill类似,只是其填充的是...原创 2018-11-05 19:09:40 · 212 阅读 · 0 评论 -
stl 数值算法
一.累加和函数accumulate 该函数用于累计指定区间的数据,也可以由用户指定操作,而不一定是加法,其实现如下:// 对区间[first,last)进行加和操作,__init为提供的初始值template <class _InputIterator, class _Tp> _Tp accumulate(_InputIterator __first, _In...原创 2018-11-05 14:45:30 · 278 阅读 · 0 评论 -
STL RB-tree
一.RB-tree概述 红黑树是二叉平衡搜索树的一种,它确保了搜索时间的复杂度为O(logn),且其维护平衡所付出的代价小于AVL树,因为AVL树要求左右子树高度差最多为1,而红黑树通过一系列规则保证左右子树的高度差不超过2倍。 红黑树的规则如下: 1)每个节点不是红色就是黑色 2)根节点为黑色 3)如果节点为红,则其...原创 2018-11-02 14:55:16 · 226 阅读 · 0 评论 -
STL vector
一.vector的定义与结构 vector的数据结构是一个简单的线性连续空间,其中有三个迭代器分别指向连续空间中已用空间的起始和结尾以及连续空间的结尾,它们是:_M_start,_M_finish,_M_end_of_storage。vector的定义摘要部分如下:template<class _Tp, class _Alloc>class _Vector_b...原创 2018-10-24 20:16:04 · 178 阅读 · 0 评论 -
STL heap
一.heap概述 STL中的heap并不是一种容器,而更像是一个算法集。在STL中为priority_queue容器提供了算法基础,该heap算法集通过迭代器操作priority_queue中的底层容器,如vector。 二.heap算法 heap算法的总体思想是:将容器中的元素调整为一个大顶堆或小顶堆,实际上就是一个满足特殊条件的完全二叉树。由于是从...原创 2018-10-29 19:12:24 · 426 阅读 · 0 评论 -
STL deque
一.deque的数据结构1.1结构图 deque中主要包括一个中控器_M_map,首尾迭代器_M_start,_M_finish,两种型别的内存配置器 typedef simple_alloc<_Tp, _Alloc> _Node_alloc_type; typedef simple_alloc<_Tp*, _Alloc> _Map_alloc_ty...原创 2018-10-27 15:35:06 · 183 阅读 · 0 评论 -
STL stack与queue
一. stack stack虽然是一种功能独特的数据结构,但在STL内部并没有为其专门提供一种实现,STL中的stack更像是一种转接口,通过限制底层容器的操作来实现栈后进先出的功能。因此stack往往被归类为容器配接器,而不是容器。关于stack的具体实现没什么介绍的必要,其仅仅是在deque容器上提供了一层接口封装,在此不再赘述。 二.queue 同样的...原创 2018-10-29 08:47:15 · 120 阅读 · 0 评论 -
STL traits萃取
一.迭代器萃取机iterator_traits 为了知道迭代器所指对象的型别,迭代器型别等等其它型别,STL中使用了一种萃取机制,通过iterator_traits来获取它们。但前提是所有迭代器都遵循约定,自行以内嵌型别定义的方式定义出相应型别,所谓内嵌型别定义就是在迭代器内部通过typedef关键字将一些类型定义为约定好的类型名。我们通过一个简单的例子来进行说明。templ...原创 2018-10-23 16:53:49 · 144 阅读 · 0 评论 -
STL算法:链表的归并排序
一.归并排序概述 归并排序的思想:假设初始序列有n个记录,则可看成是有n个有序的子序列,每个子序列长度为1,然后两两归并,如此重复直到序列有序为止,总共需要向上取整躺排序,其计算方法与计算树的深度相同,第h-1层的元素个数为:n = 2^(h - 1),即: h = + 1。所以总的时间复杂度是O(nlogn)。 二.链表的归并排序 ...原创 2018-10-25 16:26:51 · 763 阅读 · 0 评论 -
STL 迭代器
一.迭代器在SLT中的作用 迭代器是一种抽象的概念,它即是容器中的游标,又像是一个桥梁,连接了容器与算法。它使得容器和算法可以分开,彼此独立设计。比如我们平时最长用的排序算法sort,算法本身并不知道容器内部的具体实现,那么他是如何获取和设置容器中的元素的呢?这便是迭代器在中间起了作用。 二.迭代器的构造 因为每种容器的迭代器必须知道容器的一些实现细节,...原创 2018-10-19 15:15:43 · 291 阅读 · 0 评论 -
STL 空间配置器(三)
四.内存基本处理工具4.1 概述 STL定义了五个全局函数作用在未初始化空间上。分别是construc(), destory(),uninitialized_copy(),uninitialized_fill()和uninitialized_fill_n(),其中前两个已经在博文《STL 空间配置器(一)》中进行了介绍,在该篇将介绍后三个函数以及uninitialized_...原创 2018-10-18 19:22:19 · 223 阅读 · 0 评论 -
STL 空间配置器(一)
一. 概述 空间配置器包含对象的构造与析构,内存的管理,以及其它一些全局函数。当调用new创建一个对象时,需要进行两个阶段的操作:内存分配与对象构造。同样的,当调用delete释放对象时也要进行对象的析构与内存回收。相较于对象的构造与析构,内存的管理会麻烦一些,因此先从简单的开始讨论。 二.构造与析构 在stl中对象的构造操作由::construct()负责,...原创 2018-10-15 21:38:06 · 231 阅读 · 0 评论 -
特化与偏特化
一 特化与偏特化1.1 偏特化 综合STL 源码剖析中给出的两种定义,可以如下定义:所谓偏特化的意思是提供另一份更进一步条件的template定义式,其仍然是模板化的。举一个例子:template<typename T>struct Test{ typedef T value_type;};// 偏特化版本1template<typen...原创 2018-10-22 11:05:57 · 1089 阅读 · 0 评论