面向对象的程序设计语言——C++ 第二版 教学课件 作者 陈志泊 第11章.ppt
文本预览下载声明
北京林业大学 软件教研室 第11章 string类与STL简介 本章主要内容 (1)掌握C++标准类库中定义的string类的意义。 (2)掌握利用string类的构造函数完成字符串对象的创建。 (3)掌握string类的成员函数和运算符对字符串进行的各种操作。 (4)了解范型化程序设计的意义。 (5)理解标准模板库STL的基本概念。 (6)掌握容器、迭代器、算法的概念及使用方法。 (7)掌握vector容器的常用成员函数及其使用。 11.1 string类 字符串的存放采用的是数组 字符串的处理采用的是调用系统提供的库函数 11.1.1 string类的构造函数 11.1.2 string类的成员函数 11.1.3 string类的运算符 11.2 标准模板库STL 11.2.1 范型化程序设计 范型化程序设计(Generic Programming,GP)的思想就是要将程序写得尽可能通用,同时又不降低程序的效率。 GP思想不是OOP思想的一部分,它有着与OOP不同的设计技术。 C++并不是一种纯面向对象的程序设计语言,它的绝妙之处,就在于既满足了OOP(Object-oriented Programming,OOP) ,又成全了GP。 对于后者,模板立下了汗马功劳。 另外,尽管GP和OOP有诸多不同,但这种不同还不至于到“水火不容”的地步。 并且,在实际运用的时候,两者的结合使用往往可以使问题的解决更为有效。 作为GP思想实例的标准模板库STL本身便是一个很好的范例。 11.2.2 标准模板库 STL(Standard Template Library,标准模板库)是一个高效的C++程序库。 该库中包含了许多在计算机科学领域里所常用的基本数据结构和基本算法。 为C++的程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。 STL是C++标准库的一个重要组成部分,它由Alexander Stepanov、Meng Lee和David R Musser等人最先开发,它是与C++几乎同时开始开发的; 最初STL是选择Ada作为实现语言的; 后来他们选择了C++作为其实现语言。 接下来,STL又被添加进了C++库。 1996年,惠普公司又免费公开了STL,为STL的推广做了很大的贡献。 STL体现了范型化程序设计的思想,使用STL编写的程序具有高度的可重用性和可移植性,而且程序的效率也很高。 程序员不用思考具体实现过程,只要能够熟练的应用就可以了,这样他们就可以把更多的精力放在程序开发的别的方面。 STL被组织成头文件的形式来提供给程序员,例如: vector是向量的头文件 iterator是迭代器的头文件 algorithm是算法的头文件等 要注意的是,为了和C++中的常规头文件相区别,STL的头文件的文件名都没有.h的后缀。 STL中的全部成员都定义在名字空间std中。 STL主要包含了container(容器)、algorithm(算法)和iterator(迭代器)3部分内容,容器和算法通过迭代器可以进行无缝连接。 11.2.3 容器 容器是STL的一个非常重要组成部分,是指一种存储了有限集合数据元素的数据结构,其中包含的基本容器有7个: 向量(vector) 双端队列(deque) 列表(list) 集合(set) 多重集合(multiset) 映射(map) 多重映射(multimap) vector容器与C++中的数组相类同,按照STL的定义,它是一个模板类,因此能够包含任何类型的数据,可以根据程序的需要,自动的增大或缩小数组的长度。 vector容器中常用的成员函数如表所示。 11.2.4 迭代器 没有迭代器的撮合,容器和算法便无法完美的结合。 迭代器是一种范型指针,迭代器: 不仅可以方便对容器的操作; 而且STL的算法是通过迭代器来对容器中的元素进行定位和操作的。 另外,STL中还定义了输入、输出迭代器,是经过模板化了的原有标准库中的iostream部分,它提供了对C++程序输入输出的基本支持。 在功能上保持了与原有iostream的兼容,并且增加了异常处理的机制,并支持国际化(Internationalization)。 使用这些迭代器,不仅可以方便的完成键盘的输入和屏幕的输出,而且可以方便地进行文件的操作。 11.2.5 算法 STL的算法库中,包含了大约70个通用算法,这些算法均被设计成函数模板,因此具有通用性。 比如: find用于查找在容器中是否存在等于某个特定值的元素; sort用于对容器中的元素进行排序等。 所有这些操作都是在保证执行效率的前提下进行的,所以,如果在你使用了这些算法之后程序变得效率低了,首先一定不要怀疑这些算法本身,应该仔细
显示全部