前言
STL(Standard Template Library,标准模板库)是C++泛型标准化内容的重要组成部分,主要由容器、迭代器和算法三部分组成,其中封装了数据结构中的绝大部分内容。运用STL开发应用程序可以共享各种容器及算法,避免了低层次的各种容器及常用算法的反复开发,在代码一致性、升级、维护等方面都有很大的优越性。因此,学习STL是进行深层次开发C++应用程序的重要途径。但是,目前市场上关于STL的书籍很多是译著,在思考方法上可能与我们的学生不一致,学习起来很吃力。所以,本书力求把多年的STL编程经验按照学生的思维方式进行编排,希望学生们能很快学会STL泛型编程方法,体会STL泛型编程的乐趣。
本书第1版于2010年出版,很多读者在使用过程中给予了积极的肯定,并提出了中肯的建议。根据近几年的教学实践,作者对教材内容、开发环境做了调整,使其更适用于不断变化的C++教学及开发。主要修订如下。
(1) 第1章~第10章所有示例程序,第11章部分程序都在DEVCPP编译环境下重新调式,与原来的VC稍有不同。很多读者认为VC的STL有许多漏洞,DEV更好,支持gcc编译。可直接移植到Linux、Unix下,所有代码修改的部分均已调试通过。
(2) 删除了10.11“自定义STL风格函数”。该部分涉及STL内核程序,而VC、DEV下的内核是不同的,这里不宜进行分类讨论。另外,也删除了原1.3节“建立STL程序的方法”。
(3) 作为配套资源,本书提供所有调试程序的源码,并提供32位或64位的DEV开发环境。
全书共分11章,第1~10章侧重于基础知识部分,第11章侧重于综合应用部分。
第1章介绍STL的历史和主要内容以及本书用到的开发环境。
第2章通过示例说明STL中的内存管理思想、重要的traits模板技术、模板与操作符重载的关系。
第3章介绍STL中引入迭代器的原因,并通过自定义迭代器示例加深理解迭代器的内涵。
第4章介绍标准输入输出流、文件输入输出流、字符串输入输出流。
第5章介绍字符串创建方式及增、删、改、查等常用功能应用方法。
第6章介绍引入函数对象的原因,系统函数对象有哪些,自定义函数对象应用方法。C++ STL基础及应用(第2版) 第7章介绍vector、deque、list、queue、stack、priority_queue、bitset、set和map等通用容器的用法,并强调了容器适配器的作用。
第8~10章主要是讲算法。第8章介绍非变异算法,包括循环、查询、计数、比较等功能;第9章介绍变异算法,包含复制、交换、变换、替换、填充、生成、删除、唯一、反转、环移、随机、划分等功能;第10章介绍排序及相关操作的算法。
第11章侧重于集成应用,包括算法综合应用、在数据结构中应用、在Visual C++中应用三部分。算法综合应用主要介绍在多态、文件解析、综合查询中的STL应用方法;在数据结构中应用介绍全排列、频度、最长公共子序列、大整型数加法、乘法、矩阵、回溯、字符串表达式、图中的STL应用方法。在Visual C++中应用介绍用STL容器存储绘图信息,容器+算法实现数据保存与查询问题,并介绍STL与动态链接库的接口问题等。
本书第1~5和第11章由刘德山编写,第6~10章由金百东编写。因本书程序较多,全书变量均用正体。
本书内容循序渐进,示例丰富,第1~10章的所有示例代码编译后就可以运行。第11章某些程序由于较大,做了简化处理。示例结果都做了必要的说明,对一些稍难的题目,对其设计思想也做了相应的论述,帮助读者加深对STL的理解。
由于作者水平有限,时间紧迫,书中难免有疏漏之处,恳请广大读者批评指正,不胜感激。
编者2015年3月