首页 理论教育 STL类模板简介及定义

STL类模板简介及定义

时间:2023-10-25 理论教育 版权反馈
【摘要】:STL主要依赖于模板。在1994年7月的滑铁卢会议上,ANSI最终通过了Alexander Stepanov的提案,决定将STL正式纳入C++标准化进程之中。1998年,ANSI/ISO C++标准正式定案之后,STL即被纳入整个C++标准库中。那么,类模板的定义到底是什么呢?在ISO/IEC 14882:2003中,类模板的英文定义是:“A class template defines the layout and operation for an unbounded set of related types.”,较恰当的中文翻译应该是:“对于一些非紧密相关的数据类型,类模板定义了它们共同的设计和操作(子函数)”。

STL类模板简介及定义

本书将正式开始讲述C++STL(标准模板库)的内容。STL的一个重要特点是数据结构算法的分离。这种分离增强了STL的通用性。

STL的另一个重要特点是它不是面向对象的。STL主要依赖于模板。这使得STL的组件具有广泛通用性的底层特征。由于STL基于模板,内联函数的使用使得生成的代码短小高效。STL包含了诸多在计算机科学领域中常用的基本数据结构和基本算法,为广大C++程序员提供了一个可扩展的应用框架,高度体现了软件的可复用性。

从实现层次看,整个STL是以模板作为基石的。

STL背后蕴含着泛型化程序设计(GP)的思想。在这种思想中,大部分基本算法被抽象、被泛化,独立于对应的数据结构,用于以相同或相近的方式处理各种不同的情形。

Alexander Stepanov是STL的创建者。20世纪70年代,他开始研究将算法从诸多具体应用中抽象出来的可能性。这是泛型思想的最早雏形。后来,他和纽约州立大学教授Deepak Kapur以及伦塞里尔技术学院教授David Musser共同开发了一种叫作Tecton的语言。但Tecton语言最终没有取得实用性的成果。之后,Alexander Stepanov又和他人合伙建立了一些大型程序库。由于当时的面向对象程序设计思想存在一些问题,例如抽象数据类型概念的缺陷,他希望通过对软件各部分分类,逐渐形成软件设计的概念性框架。(www.xing528.com)

1987年左右,Alexander Stepanov在贝尔实验室工作期间,开始采用C++语言进行泛型化软件库研究,并开发了庞大的算法库。1988年,Alexander Stepanov进入惠普实验室工作,并继续进行泛型化算法的研究,最终开发出了包含大量数据结构和算法部件的庞大运行库。这便是现今STL的雏形,即HP STL。1993年9月,Alexander Stepanov为ANSI/ISO C++标准委员会做了相关演讲。1994年3月,Alexander Stepanov向ANSI递交建议书,希望STL成为C++标准库的一部分,但最终未被采纳。之后,Stepanov对原有的STL进行了改进,增加了封装内存模式信息的新模块(allocator),使STL的大部分功能独立于具体的内存模式,并独立于具体的操作系统平台。在1994年7月的滑铁卢会议上,ANSI最终通过了Alexander Stepanov的提案,决定将STL正式纳入C++标准化进程之中。至此,STL终于成为C++家族的一员。

1998年,ANSI/ISO C++标准正式定案之后,STL即被纳入整个C++标准库中。

那么,类模板的定义到底是什么呢?

在ISO/IEC 14882:2003(E)中,类模板的英文定义是:“A class template defines the layout and operation for an unbounded set of related types.”,较恰当的中文翻译应该是:“对于一些非紧密相关的数据类型,类模板定义了它们共同的设计(类的结构)和操作(子函数)”。

免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。

我要反馈