STL 即 Standard Template Library
STL(标准模板库)是惠普实验室开发的一系列软件的统称。它是由Alexander Stepanov、Meng Lee和David R Musser在惠普实验室工做时所开发出来的。如今虽然说它主要出如今C++中,但在被引入C++以前该技术就已经存在了很长的一段时间。
STL的代码从广义上讲分为三类:algorithm(算法)、container(容器)和iterator(迭代器),几乎全部的代码都采用了模板类和模版函数的方式,这相比于传统的由函数和类组成的库来讲提供了更好的代码重用机会。在C++标准中,STL被组织为下面的13个头文件:<algorithm>、<deque>、<functional>、<iterator>、<vector>、<list>、<map>、<memory>、<numeric>、<queue>、<set>、<stack>和<utility>。如下笔者就简单介绍一下STL各个部分的主要特色。
原文见:http://www.csdn.net/Develop/article/16%5C16310.shtm
从根本上说,STL是一些“容器”的集合,这些“容器”有list,vector,set,map等,STL也是算法和其余一些组件的集合。这里的“容器”和算法的集合指的是世界上不少聪明人不少年的杰做。
STL的目的是标准化组件,这样你就不用从新开发它们了。你能够仅仅使用这些现成的组件。STL如今是C++的一部分,所以不用额外安装什麽。它被内建在你的编译器以内。由于STL的list是一个简单的容器,因此我打算从它开始介绍STL如何使用。若是你懂得了这个概念,其余的就都没有问题了。另外,list容器是至关简单的,咱们会看到这一点。
这篇文章中咱们将会看到如何定义和初始化一个list,计算它的元素的数量,从一个list里查找元素,删除元素,和一些其余的操做。要做到这些,咱们将会讨论两个不一样的算法,STL通用算法都是能够操做不止一个容器的,而list的成员函数是list容器专有的操做。
这是三类主要的STL组件的简明纲要。STL容器能够保存对象,内建对象和类对象。它们会安全的保存对象,并定义咱们可以操做的这个对象的接口。放在蛋架上的鸡蛋不会滚到桌上。它们很安全。所以,在STL容器中的对象也很安全。我知道这个比喻听起来很老土,可是它很正确。
STL算法是标准算法,咱们能够把它们应用在那些容器中的对象上。这些算法都有很著名的执行特性。它们能够给对象排序,删除它们,给它们记数,比较,找出特殊的对象,把它们合并到另外一个容器中,以及执行其余有用的操做。
STL iterator就象是容器中指向对象的指针。STL的算法使用iterator在容器上进行操做。Iterator设置算法的边界 ,容器的长度,和其余一些事情。举个例子,有些iterator仅让算法读元素,有一些让算法写元素,有一些则二者都行。 Iterator也决定在容器中处理的方向。
你能够经过调用容器的成员函数begin()来获得一个指向一个容器起始位置的iterator。你能够调用一个容器的 end() 函数来获得过去的最后一个值(就是处理停在那的那个值)。
这就是STL全部的东西,容器、算法、和容许算法工做在容器中的元素上的iterator。 算法以合适、标准的方法操做对象,并可经过iterator获得容器精确的长度。一旦作了这些,它们就在也不会“跑出边界”。 还有一些其余的对这些核心组件类型有功能性加强的组件,例如函数对象。
原文见:http://www.chinalinuxpub.com/doc/pro/stl.html html
ATL:
能够看一下潘爱民关于《ATL Internals》的书评:
ATL是一个产生C++/COM代码的框架,就如同C语言是一个产生汇编代码的框架
ATL又不一样于MFC,它彻底面向COM组件,其技术路线也不一样于MFC,MFC使用的是C++中的继承、封装、嵌套等常规技术,而ATL使用了C++中模板、多继承等高级技术,甚至还用到了STL。因此学习和使用ATL要求咱们必须熟悉这些C++高级特性。另外一方面,ATL结构彻底针对COM中的诸多规范,这就要求使用人员必须很是了解COM规范,才有可能真正把ATL用好
对于COM应用的开发,ATL无疑是首选的工具,与MFC相比,ATL的规模还不算大,可是从上述的介绍咱们能够看出,ATL涉及到了COM的方方面面。实际上,ATL的内容还要多得多,好比OLE DB的支持、MTS的支持等,尽管如此,若是咱们有了这本书中的内容为基础,那么再去学习这些扩展的内容就会容易得多,结合ATL中实现COM的基本手段加上这些应用技术的背景知识,咱们能够很容易地掌握这些开发技术。
可是若是咱们要想熟练掌握甚至精通ATL的话,那么这只是一个开头,前面还有漫长的路要走。缘由有多方面,一则COM自己异常复杂,不下苦功难窥全貌;二则ATL确实奥妙不少,它体现了C++语法的博大精深;三则ATL还存在不少错误,虽然本书做者指出了一些错误,但实际的错误确定更多,这就对ATL使用者提出了更高的要求,若是使用过程当中不能发现这些错误或者避开这些错误,那么用ATL反而会阻碍咱们的工做。
虽然ATL比较精深,可是这本书的讲解很是通俗易懂,语言比较简练,条理很是清楚。即便在读完这本书以后,它仍然能够做为参考书指导咱们的开发和学习工做。我想,这就是好书的价值所在吧。 linux
WTL简介
见:http://www.c-view.org/journal/006/wtl.htm
在ATL出现的时候,一些部分COM的编程人员开始以为开发COM运用是一种快乐,由于使用它很方便地开发小规模的COM组件,但好景不长,现实的COM组件是包罗至关普遍的,特别当它们准
备使用包装我窗口控件,发现ATL提供了至关的稀少。所以Microsoft推出了半成品与没有技术支持的WTL,这也是WTL诞生的缘由。
不少初次接触WTL都问“WTL这三个字母表明什么呢?”:WTL全称为Windows Template Library,构架于ATL之上,采用C++模板技术来包装大部窗口控制,并给出一个与MFC类似的应用框架。
他们紧跟着问“那我如何获得它呢?”:因为WTL是Microsoft推出的,在Microsoft的PlatForm SDK中就有
WTL是ATL的扩展,也是由ATL小组开发,包含在Microsoft于2000年1月发布的开发平台SDK包中(也能够从Microsoft网站上下载),虽然Microsoft没有正式支持。WTL经过提供一个用于编写Win32应用程序和控制的轻量级的框架,一些特殊的视图,GDI对象和实用的类,来扩展了ATL窗口类
WTL设计特性--附带地,相对于MFC的优点--包括:
模板化,所以有较小的代码量。例如,一个简单的“hello world”SDI应用程序,基于WTL的程序只有24KB,而MFC静态链接结果是440KB,MFC动态链接的结果是24KB+1MB。
无太多相关性,而且能够自由地和SDK代码直接混合。
不会强迫使用特定的应用程序模型,尤为相对于MFC的应用程序框架。
WTL类包括:
标准控制(编辑框,列表框,按钮等等)
公共控制(包括列表视图,树形视图,进度条,微调按钮)
IE控制(rebar,平面滚动条,日历等等)
命令条,菜单,和更新UI类
公共对话框
属性单和页类
框架窗口,MDI框架和子框架,分隔条,可滚动的窗口
设备环境(DC)和GDI对象类(笔、刷子、位图等)
打印机及其信息和设备模式类
实用工具类:包括CPoint, CRect, CSize, 和CString类
WTL AppWizard容许你生成SDI、MDI、多线程SDI和基于对话框的应用程序。多线程SDI应用程序就象IE或Windows Explorer(个人电脑),看起来象是启动了多个实例,实质上它们是同一进程的多个视图。这些视图能够是普通的基于CWindowImpl的窗口,或基于窗体、列表框、编辑框、列表视图、树形视图、丰富文本编辑框或HTML控制。你可让你的应用程序拥有rebar、命令条(如同Windows CE)、工具条或状态条。你的应用程序能够包含ActiveX控制,甚至能够是一个COM服务器。算法