- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
标准模板库.ppt
第10章 标准模板库 主要内容: STL 容器类 迭代器 算法库 10.1 STL STL的基本思想 可以把软件部件想象成一个三维空间 第一维表示数据类型(int, double, char, …) 第二维表示容器(array, linked-list, …) 第三维表示算法(sort, merge, search, …) 根据图示,需要设计i*j*k个不同的代码版本,比如整数数组的排序算法、double数组的排序算法,double linked-list的搜索算法…。 通过使用数据类型作为参数的模板函数,第一维(i轴)就可取消,而仅需要设计j*k个不同的代码。 下一步是让算法可以工作在不同的容器上,这就意味着排序算法既可以用在array上,也可用在linked-list上。即只需要设计j+k个不同的代码版本。 STL具体化了上述思想,期望通过减少开发时间以简化软件开发,简化调试、维护并增加代码的可移植性。 什么是STL 标准模板库(Standard Template Library, STL),是ANSI/ISO C++最新的标准函数库中的一个子集,是一个泛型化(generic)的数据结构和算法库。(如图1) 从逻辑层次来看,在STL中体现了泛型化程序设计(GP)的思想,引入了诸多新的名词,比如像需求(requirements)概念(concept)模型(model)容器(container )算法(algorithm),迭代子(iterator)等。与OOP中的多态(polymorphism)一样,泛型也是一种软件的复用技术。 从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,这种方式基于C++语言的模板机制。 STL中的软件包主要包括: 容器(Container):一种存储有限集合数据元素的数据结构,例如,向量、列表、集合、映射等。 迭代器(Iterator):或称游标,是一种面向对象的泛型指针,实现对容器中的任意类型对象的遍历,从而对各对象进行处理。 算法库(Algorithms):包括了各种基本算法,如sort,copy,search,revese等,对容器中的对象进行各种操作。 函数对象(Function Object):定义了函数调用操作符(operator())的类。 适应器(Adaptor):封装一个部件以提供另外的接口(例如用list实现stack)。 一般而言,STL作为一个泛型化的数据结构和算法库,并不牵涉具体语言(当然,在C++里,它被称为STL)。即如果条件允许,用其他语言也可以实现之。这里所说的条件,主要是指类似于“模板”这样的语法机制。 STL和MFC的差别 相同:STL和MFC都是一种C++类库。 不同:MFC是Microsoft的一个产品,STL是ANSI/ISO C++标准的一部分,是所有C++编译器和所有操作系统平台都支持的一种类库。 STL的组织 在C++标准中,STL被组织为下面的13个不带.h后缀的头文件:algorithm、deque、functional、iterator、vector、list、map、memory、numeric、queue、set、stack和utility。 程序举例 例10.1 P217 例10.2 P217 编译STL程序 Borland C++4.0及以上的版本,Microsoft Visual C++ 5.0及以上的版本支持STL。 10.2 容器类 容器的基本概念 容器 指一种存储有限集合数据元素的数据结构。 容器类 是一批相关的标准类模板的总称,它包含最基本的7个标准类模板,分为两大类: 顺序容器类(Sequence Container ) 在其中存储的对象是有序的,用户可以在指定位置插入或存取对象。 vector(向量) list(列表) deque(双端队列) 关联容器类(Associative Container ) 在其中存储的对象是无序的,对象在容器中的装入位置由非线性方法确定。 map(映像) set(集合) multiset(多重集合) multimap(多重映像) 关联容器提供了基于KEY的数据的快速检索能力。元素被排好序,检索数据时可以二分搜索。 当一个KEY对应一个Value时,可以使用集合(Set)和映射(Map);若对应同一KEY有多个元素被存储时,可以使用多集合(MultiSet)和多映射(MultiMap)。 容器类的特点 任何一个容器类都可以容纳任何类型的对象或任何基本数据类型的数值。 STL自动把基本数据类型的数据包装转换为类型的对象。 对用户自定义类类型的对象,要求必须提供正确的构造函数、拷贝构造函数和析构函数。 所有容器类都
文档评论(0)