自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

小木木的博客

种一棵树最好的时间是十年前,其次是现在

  • 博客(21)
  • 收藏
  • 关注

原创 STL之迭代器

1、基本概念  迭代器,是一种抽象的设计模式,主要是提供一种方法,使之能够依序巡防某个聚合物所含的各个元素,而又无需暴露该聚合物的内部表述方式。STL想要将容器和算法分开,达到泛化的目的,就需要迭代器作为其中的胶着剂。

2017-08-07 08:53:42 350

原创 STL之空间配置器

1、基本概念  空间配置器,就是用于管理容器的内存的分配与释放,而不用容器自己去处理。2、标准接口  空间配置器,根据STL的规范,是有一套统一的接口的。但是实现这些接口的空间配置器,只能有限地搭配当前各个版本的STL,因为每个版本都做了自己的特殊处理,并没有严格遵循这一接口,SGI版本的甚至自行实现了一套接口,我们要看的就是SGI版本的。3、SGI空间配置器  SGI

2017-07-26 09:42:10 199

原创 STL之适配器(adapter)

1、基本概念  适配器, 在STL中扮演着转换器的角色,本质上是一种设计模式,用于将一种接口转换成另一种接口,从而是原本不兼容的接口能够很好地一起运作。2、基本类型  根据目标接口的类型,适配器可分为以下几类: 1. 改变容器的接口,称为容器适配器; 2. 改变迭代器的接口,称为迭代器适配器; 3. 改变仿函数的接口,称为仿函数适配器。3、容器适配器  STL的

2017-07-12 08:47:30 1676

原创 STL之仿函数

1、基本概念  仿函数,顾名思义,仿照函数的使用形式,但本质上是一个类模板。通过重载运算符(),通过类模板生成的模板类就可以像函数一样使用。STL设计仿函数,可以是算法采用不同的策略,从而使算法更加的灵活。2、相应型别  STL为了统一仿函数,定义了一元函数和二元函数的参数类型及返回值类型,但不支持三元函数。每个定义的仿函数对应进行继承,就可以相同的手法获得仿函数的参数类型和返回值类型。3、算术类仿

2017-07-09 09:57:20 300

原创 STL之算法

1、基本概念

2017-06-17 13:06:58 161

原创 数据结构之hashtable

1、基本概念  hashtable是一种存储成对的键值和实值元素的字典结构。不同于红黑树的对数级的平均时间消耗,hashtable提供常数级的时间消耗。2、散列函数  为了达到常数级的时间消耗,底层必须使用array这种连续空间的内存结构。想要存储元素,就需要将元素的键值映射成对应的索引值,实现这种功能的映射函数就称为散列函数(hash function)。散列函数的实现是很重要的

2017-05-23 09:30:33 3066

原创 STL关联容器之multiset和multimap

1、基本概念  由于set和map不允许插入相同的元素,stl使用multi版本来满足这一需求,原版与multi版的特性是一致的,唯一的区别是在插入这里,这引起以下几点不同: 1. []访问。set不支持[]直接对元素进行访问,其对应的multi版也是不支持的;map支持[],但是multi版是不支持的。 2. 插入结果。multiset插入后是可以出现相同值的元素,而multimap插入

2017-05-15 09:32:35 196

原创 STL关联容器之map

1、基本概念  map和set一样,也是一种关联容器,内部也是使用红黑树作为底层的实现结构。但是不同的是,map的键值和实值可以是不一样的。2、查找操作  map与set的查找操作本质上是一样的,没有特殊的地方。3、插入操作  map使用键值排列元素的位置,因而也不允许插入相同键值的元素,插入算法返回pair4、删除操作  map与set的删除操作也是一样的,都是使用红黑树的算法。5、修改算法  不

2017-05-13 09:59:49 213

原创 STL关联容器之set

1、基本概念  关联式容器不同于序列容器,其内部的元素是按照键值和实值的形式存储的,底层结构会按照键值的大小将元素插到相应的位置。关联容器没有头尾的概念,只有最大元素和最小元素。   set就是一种关联容器,其内部使用红黑树作为底层的实现结构。同时,set的元素只有实值,set直接将元素的实值作为元素的键值。2、查找操作  set查找操作是使用红黑树的查找算法,可以达到很高效的O(logn),查找

2017-05-12 09:27:41 384

原创 数据结构之红黑树

1、基本概念  红黑树是一种平衡二叉查找树,不同于AVL树,红黑树必须满足一下几个规则: 1. 树中的节点不是为红色就是为黑色; 2. 根节点的颜色为黑色; 3. 若节点的颜色为红色,则其子节点必然为黑色; 4. 任意节点至NULL的路径上黑色节点的数目是相同的。   根据规则4,可知新增节点必须为红色;根据规则2和3,若节点为红色,则其父节点必然为黑色;根据规则3,若插入节点的父节点为红

2017-05-07 10:15:33 256

原创 数据结构之AVL树

1、基本概念  二叉查找树经过一段时间的插入和删除操作,很容易造成树的高度不平衡,从而达到O(n)的查找速度,这不是我们想要的。因而,我们在二叉查找树的基础上加上平衡条件,形成平衡二叉查找树,保证O(logn)的操作速度。AVL树就是一种平衡二叉查找树,平衡条件是对于树中的任意节点,其左右子树的高度相差不超过1。2、查找操作  AVL树的查找与二叉查找树的操作是一致的,直接复用。

2017-04-18 09:39:01 271

原创 数据结构之二叉查找树

1、基本概念  二叉查找树,在二叉树的基础上加了以下限制条件:对于树中的任意节点,其键值大于左子树中的任意节点的键值,小于右子树中的任意节点的键值。根据此结构,我们可以得到对数级的查找和插入效率。同时,从根节点一直向左查找可得到最小值,一直向右查找就可得到最大值。2、查找操作  二叉查找树在查找元素时,2、插入操作  二叉查找树在插入节点时,

2017-04-15 08:13:04 276

原创 数据结构之二叉树

1、基本概念  二叉树,顾名思义,就是子节点最多只有两个的树。由于最多只有两个,可以区分左右,我们称子节点为左子女和右子女,次序不可颠倒。根据二叉树的结构,我们可以得到以下特性: 1. 第i层的节点个数最多为2^(i-1)(i>=1)个; 2. 深度为h的二叉树最多有2^h -1(h>=1)个节点,最少为h个; 3. 若叶节点的个数为n1,度数为2的节点个数为n2,则n1=n2+1;2、特殊结

2017-04-14 08:05:04 887

原创 数据结构之tree

1、基本概念  tree是节点的集合。这个集合可以是空集;若不是空集,则有一个根节点和零个或多个非空子树,每个子树都被根节点使用一条有向边所连接。   由树的定义,我们可以知道,树是由节点和有向边组成的,根据树的结构,我们有以下衍生的定义: 1. 整棵树最上层的节点称为根节点(root); 2. 连接两个节点的称为有向边(edge); 3. 有向边的头称为父节点(parent),尾称为

2017-04-11 09:04:46 495

原创 STL适配器之priority_queue

1、基本概念priority_queue本质上也是一个queue,但在其基础上加入了权值的概念,入队依然是依次入队,但出队的时候却是权值最高的元素先出队,以满足一些特殊的需求。heap将极值放到头节点,可以很好的满足priority_queue的需求。默认情况下,priority_queue使用vector作为底层容器,使用max-heap进行规制处理。2、基本用法priority_queue是在

2017-04-08 16:52:18 214

原创 STL算法之heap

1、基本概念 在stl中,heap并不是做成容器,而是作为算法来使用的。

2017-04-08 10:38:15 412

原创 STL适配器之queue

1、基本概念 queue是一种先进先出的数据结构,要求只能从一端插入数据,从另一端移除数据,跟stack一样,也是在底层容器的基础上实现的,是一种容器适配器。2、迭代器 queue也不提供遍历元素的功能,因而也提供迭代器。3、底层容器 queue使用empty、size、front、back、push_back、pop_front这些底层容器的接口,传入的底层容器必须支持这些接

2017-04-06 09:08:51 300

原创 STL适配器之stack

1、基本概念 stack是一种先进后出的数据结构,要求数据只能从顶端插入、删除和访问。stack是在底层容器的基础上实现的,内部都是调用容器的接口,但对外却提供约束性的新接口,因而严格来说stack并不算是一个容器,而是一种容器适配器。2、迭代器 stack只允许在顶端进行数据的操作,因而并不提供遍历的功能,也不提供迭代器。3、底层容器 stack的底层容器使用的是模板参数,内

2017-04-06 08:27:16 260

原创 STL序列容器之deque

1、基本概念 deque是双向开口的序列空间,可在常数时间内在头尾两段插入和删除元素,相比vector要高效很多。同时,deque没有容量的概念,其内部是以分段的连续空间组合而成的。就我看来,deque是vector和list的折中状态,兼和了vector的快速访问和list的空间动态增长,能够适应更加特殊的需求。2、设计思路 deque在内部使用一小块连续空间的map作为控制器,其中

2017-04-04 16:27:00 304

原创 STL序列容器之list

1、基本概念 相比vector的连续线性空间,list的内部空间是不连续的。STL的list实现是一个双向链表,因而其每个元素必须包含一个指向前一个节点的指针和一个指向后一个节点的指针。优点是插入和删除的代价比vector低的多,同时占用空间需要多少创建多少,空间利用率高;缺点是维护额外的指针需要消耗一定的空间。 2、迭代器 list提供的迭代器能够向前和向后访问,但无法

2017-04-03 23:02:08 225

原创 STL序列容器之vector

1、基本概念 我们都知道c++原生的array是静态空间,一旦分配就不可更改,如果想要扩展大小就必须自行处理。vertor在提供array功能的基础上,帮我们完成空间的扩展,让我们使用起来更加的自由。2、迭代器 vector提供的迭代器具备基本的算术运算,可随机访问vector内部的元素,因而属于随机迭代器。3、容量扩展 当vector内部的空间已经使用完后,此时再向其中添加元

2017-04-02 23:47:58 224

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除