- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
STL(模板库)根本概念
1.1根本概念
STL〔StandardTemplateLibrary,标准模板库)是惠普实验室开发的一系列软件的统称。现然主要出现在C++中,但在被引入C++之前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm〔算法〕、container〔容器〕和iterator〔迭代器〕,几乎所有的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来说提供了更好的代码重用时机。在C++标准中,STL被组织为下面的13个头文件:algorithm、deque、functional、iterator、vector、list、map、memory、numeric、queue、set、stack和utility。
STL详细的说六大组件
容器〔Container〕
算法〔Algorithm〕
迭代器〔Iterator〕
仿函数〔Functionobject〕
适配器〔Adaptor〕
空间配制器〔allocator〕
招聘工作中,经常遇到C++程序员对STL不是非常了解。大多是有一个大致的映像,而对于在什么情况下应该使用哪个容器和算法都感到比拟茫然。而STL是C++程序员的一项不可或缺的根本技能,掌握它对提升C++编程大有裨益。
1.2容器
在实际的开发过程中,数据结构本身的重要性不会逊于操作于数据结构的算法的重要性,当程序中存在着对时间要求很高的局部时,数据结构的选择就显得更加重要。
经典的数据结构数量有限,但是我们常常重复着一些为了实现向量、链表等结构而编写的代码,这些代码都十分相似,只是为了适应不同数据的变化而在细节上有所出入。STL容器就为我们提供了这样的方便,它允许我们重复利用已有的实现构造自己的特定类型下的数据结构,通过设置一些模版类,STL容器对最常用的数据结构提供了支持,这些模板的参数允许我们指定容器中元素的数据类型,可以将我们许多重复而乏味的工作简化。
容器局部主要由头文件vector,list,deque,set,map,stack和queue组成。对于常用的一些容器和容器适配器〔可以看作由其它容器实现的容器〕,可以通过下表总结一下它们和相应头文件的对应关系。
容器的概念
用来管理一组元素
容器的分类
序列式容器〔Sequencecontainers〕
每个元素都有固定位置--取决于插入时机和地点,和元素值无关。
vector、deque、list
a[3];a[0]
关联式容器〔Associatedcontainers〕
元素位置取决于特定的排序准那么,和插入顺序无关
set、multiset、map、multimap
数据结构
描述
实现头文件
向量(vector)
连续存储的元素
vector
列表(list)
由节点组成的双向链表,每个结点包含着一个元素
list
双队列(deque)
连续存储的指向不同元素的指针所组成的数组
deque
集合(set)
由节点组成的红黑树,每个节点都包含着一个元素,节点之间以某种作用于元素对的谓词排列,没有两个不同的元素能够拥有相同的次序
set
多重集合(multiset)
允许存在两个次序相等的元素的集合
set
栈(stack)
后进先出的值的排列
stack
队列(queue)
先进先出的执的排列
queue
优先队列(priority_queue)
元素的次序是由作用于所存储的值对上的某种谓词决定的的一种队列
queue
映射(map)
由{键,值}对组成的集合,以某种作用于键对上的谓词排列
map
多重映射(multimap)
允许键对有相等的次序的映射
map
1.3迭代器
迭代器从作用上来说是最根本的局部,可是理解起来比前两者都要费力一些。软件设计有一个根本原那么,所有的问题都可以通过引进一个间接层来简化,这种简化在STL中就是用迭代器来完成的。概括来说,迭代器在STL中用来将算法和容器联系起来,起着一种黏和剂的作用。几乎STL提供的所有算法都是通过迭代器存取元素序列进行工作的,每一个容器都定义了其本身所专有的迭代器,用以存取容器中的元素。
迭代器局部主要由头文件utility,iterator和memory组成。utility是一个很小的头文件,它包括了贯穿使用在STL中的几个模板的声明,iterator中提供了迭代器使用的许多方法,而对于memory的描述那么十分的困难,它以不同寻常的方式为容器中的元素分配存储空间,同时也为某些算法执行期间产生的临时对象提供机制,memory中的主要局部是模板类allocator,它负责产生所有容器中的默认分配器。
1.4算法
函数库对数据类型的选择对其可重用性起着至关重要的作用。举例来说,一
文档评论(0)