
STL
我的一亩三分地儿
做点事情!
展开
-
STL-string容器
1. string容器基本概念C风格字符串(以空字符结尾的字符数组)太过复杂难于掌握,不适合大程序的开发,所以C++标准库定义了一种string类,定义在头文件。String和c风格字符串对比:1. Char*是一个指针,String是一个类, string封装了char*,管理这个字符串,是一个char*型的容器。2. String封装了很多实用的成员方法, 例如查找find,拷原创 2017-09-22 01:42:19 · 244 阅读 · 0 评论 -
STL-list容器
1. list容器基本概念链表是一种物理存储单元上非连续、非顺序的存储结构,数据元素的逻辑顺序是通过链表中的指针链接次序实现的。链表由一系列结点(链表中每一个元素称为结点)组成,结点可以在运行时动态生成。每个结点包括两个部分:一个是存储数据元素的数据域,另一个是存储下一个结点地址的指针域。相较于vector的连续线性空间,list就显得负责许多,它的好处是每次插入或者删除一个元素,就是配置原创 2017-09-23 00:22:53 · 615 阅读 · 0 评论 -
STL-set/multiset容器
1. set/multiset容器基本概念set和multiset容器实现是基于红黑树,红黑树是平衡二叉树的一种,所以Set的特性是,所有元素都会根据元素的键值自动被排序。Set的元素即是键值又是实值。Set不允许两个元素有相同的键值。请问,我们可以通过set的迭代器改变set元素的值吗?不行,因为set元素值就是其键值,关系到set元素的排序规则。如果任意改变set元素值,会严重破坏se原创 2017-09-23 11:56:02 · 286 阅读 · 0 评论 -
STL-stack容器
1. stack容器基本概念stack是一种先进后出(First In Last Out,FILO)的数据结构,它只有一个出口,形式如图所示。stack容器允许新增元素,移除元素,取得栈顶元素,但是除了最顶端外,没有任何其他方法可以存取stack的其他元素。换言之,stack不允许有遍历行为。有元素推入栈的操作称为:push,将元素推出stack的操作称为pop.1.2 stack没有原创 2017-09-23 00:16:43 · 315 阅读 · 0 评论 -
STL-deque容器
1. deque容器基本概念Vector容器是单向开口的连续内存空间,deque则是一种双向开口的连续线性空间。所谓的双向开口,意思是可以在头尾两端分别做元素的插入和删除操作,当然,vector容器也可以在头尾两端插入元素,但是在其头部操作效率奇差,无法被接受。Deque容器和vector容器最大的差异,一在于deque允许使用常数项时间对头端进行元素的插入和删除操作。二在于deque没有原创 2017-09-22 02:02:58 · 399 阅读 · 0 评论 -
STL-vector容器
1. vector容器基本概念vector的数据安排以及操作方式,与array非常相似,两者的唯一差别在于空间的运用的灵活性。Array是静态空间,一旦配置了就不能改变,要换大一点或者小一点的空间,可以,一切琐碎得由自己来,首先配置一块新的空间,然后将旧空间的数据搬往新空间,再释放原来的空间。Vector是动态空间,随着元素的加入,它的内部机制会自动扩充空间以容纳新元素。因此vector的运用原创 2017-09-22 01:52:03 · 331 阅读 · 0 评论 -
STL-map和multimap容器
1. map/multimap基本概念Map/multimap内部是以红黑树为实现机制,具有能够自动对元素进行排序和查找效率优良的特性。所有元素都会根据元素的键值自动排序。Map所有的元素都是pair,同时拥有实值和键值,pair的第一元素被视为键值,第二元素被视为实值,map不允许两个元素有相同的键值。Multimap和map的操作类似,唯一区别multimap键值可重复。请问:我们可以原创 2017-09-23 12:16:45 · 238 阅读 · 0 评论 -
STL-foreach算法
for_each算法用于遍历容器中的元素,前提是容器必须要提供迭代器,例如stack容器、queue容器本身不提供迭代器,所以不能使用for_each算法。for_each的源码(P.J. Plauger版本)实现如下:templateinlinevoid for_each(_InIt _First, _InIt _Last,_Fn1 _Func){ for(; _First原创 2017-09-23 13:22:17 · 1658 阅读 · 0 评论 -
STL-transform算法
transform算法的作用是 将一个容器中的值搬运到另一个容器中。提供了两个重载版本,我们先看下transform的源代码实现:重载版本一: template inline _OutIt_Transform(_InIt _First, _InIt _Last,_OutIt _Dest, _Fn1 _Func) { for(; _First !原创 2017-09-23 14:00:54 · 1310 阅读 · 0 评论 -
STL-find算法
find算法用于在容器中查找某个指定的值。find算法实现如下:template inline_InIt _Find(_InIt _First, _InIt _Last, const _Ty& _Val){ // find first matching _Val for (; _First != _Last; ++_First) if (*_First == _Val) br原创 2017-09-23 14:18:00 · 607 阅读 · 0 评论 -
STL-adjacent_find算法
adjacent_find算法用于在容器中查找相邻重复元素。adjacent_find算法实现源码如下:template inline _FwdIt adjacent_find(_FwdIt _First, _FwdIt _Last){ return (_STD adjacent_find(_First, _Last, equal_to<>()));}templa原创 2017-09-23 14:31:46 · 497 阅读 · 0 评论 -
STL-函数对象适配器
适配器从字面上讲,是将一个事物经过适配之后变成另外一个事物,使之能够复合我们的需求。为什么要适配,显然现有的东西不满足我们的需要。比如说,我们需要调用一个有一个参数的函数,但是结果现在只有两个参数的函数,这时怎么办?我们可以通过适配器将两个参数的函数转换成一个参数的函数。stl中实现了几个不同用途的适配器,我们一一来看看如何使用,至于stl实现这些适配器的思路,我们稍后在下一篇文章再给大家分析原创 2017-09-23 13:06:25 · 554 阅读 · 0 评论