关闭

C++ STL简化了编程

发表于:2015-9-30 09:39

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:lcchuguo    来源:51Testing软件测试网采编

  作为C++标准必不可少的一部分,STL应该是渗透在C++程序的角角落落里的。
  STL不是实验室里的宠儿。也不是程序猿桌上的摆设。她的激动人心并不是昙花一现。本教程旨在传播和普及STL的基础知识,若能借此机会为STL的推广做些力所能及的事情,到也是件让人愉快的事情。
  1、"什么是STL?"。假如你对STL还知之甚少,那么我想,你一定非常想知道这个问题的答案,坦率地讲,要指望用短短数言将这个问题阐述清晰,也决非易事。
  因此,假设你在看完本节之后还是认为似懂非懂。大可不必着急。在阅读了兴许内容之后,相信你对STL的认识。将会愈加清晰、准确和完整。只是。上述这番话听起来是否有点像是在为自己糟糕的表达能力开脱罪责呢?:)
  不知道你是否有过这种经历。
  在你准备着手完毕数据结构老师所布置的家庭作业时,或者在你为你所负责的某个软件项目中加入一项新功能时。你发现须要用到一个链表(List)或者是映射表(Map)之类的东西,可是手头并没有现成的代码。
  于是在你開始正式考虑程序功能之前,手工实现List或者Map是不可避免的。于是……,终于你顺利完毕了任务。
  也许此时,作为一个具有较高素质的程序猿的你还不肯罢休(或者是一个喜欢偷懒的优等生:)。由于你会想到。假设以后还遇到这种情况怎么办?没有必要再做一遍相同的事情吧。
  假设说上述这样的情形每天都在发生,也许有点夸张。
  可是。假设说整个软件领域里,数十年来确实都在为了一个目标而奋斗--可复用性(reusability)。这看起来似乎并不夸张。从最早的面向过程的函数库。到面向对象的程序设计思想,到各种组件技术(如:COM、EJB)。到设计模式(design pattern)等等。
  而STL也在做着类似的事情,同一时候在它背后蕴涵着一种新的程序设计思想--泛型化设计(generic programming)。
  继续上面提到的那个样例,假如你把List或者map完善的保留了下来,正在暗自得意。且慢,假设下一回的List里放的不是浮点数而是整数呢?假设你所实现的Map在效率上总是令你不太惬意而且有时还会出些bug呢?你该怎样面对这些问题?使用STL是一个不错的选择。确实如此。STL能够美丽地解决上面提到的这些问题。虽然你还能够寻求其它方法。
  说了半天,究竟STL是什么东西呢?
  2、STL(Standard Template Library)。即标准模板库,是一个具有工业强度的。高效的C++程序库。
  它被容纳于C++标准程序库(C++ Standard Library)中。是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包括了诸多在计算机科学领域里所经常使用的基本数据结构和基本算法。
  为广大C++程序猿们提供了一个可扩展的应用框架。高度体现了软件的可复用性。这样的现象有些类似于Microsoft Visual C++中的MFC(Microsoft Foundation Class Library),或者是Borland C++ Builder中的VCL(Visual Component Library),对于此二者,大家一定不会陌生吧。
  从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词。比方像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代子(iterator)等。与OOP(object-oriented programming)中的多态(polymorphism)一样。泛型也是一种软件的复用技术。
  从实现层次看。整个STL是以一种类型參数化(type parameterized)的方式实现的,这样的方式基于一个在早先C++标准中没有出现的语言特性--模板(template)。
  假设查阅不论什么一个版本号的STL源码,你就会发现,模板作为构成整个STL的基石是一件千真万确的事情。除此之外,还有很多C++的新特性为STL的实现提供了方便。
  不知你对这里一下子冒出这么多术语做何感想,希望不会另你不愉快。假如你对它们之中的大多数不甚了解。敬请放心。在兴许内容中将会对这些名词逐一论述。
  正如开头所提到的。
  有趣的是。对于STL还有第二种解释--STepanov & Lee,前者是指Alexander Stepanov,STL的创始人;而后者是Meng Lee,她也是使STL得以推行的功臣,第一个STL成品就是他们合作完毕的。
  这一提法源自1995年3月。Dr.Dobb's Journal特约记者, 著名技术书籍作家Al Stevens对Alexander Stepanov的一篇专訪。
21/212>
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号