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

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比较精深,但是这本书的讲解非常通俗易懂,语言比较简练,条理非常清楚。即使在读完这本书之后,它仍然可以作为参考书指导我们的开发和学习工作。我想,这就是好书的价值所在吧。

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服务器。

STL,ATL,WTL的联系与区别的更多相关文章

  1. [ATL/WTL]_[中级]_[保存CBitmap到文件-保存屏幕内容到文件]

    场景: 1. 在做图片处理时,比方放大后或加特效后须要保存CBitmap(HBITMAP)到文件. 2.截取屏幕内容到文件时. 3.不须要增加第3方库时. 说明: 这段代码部分来自网上.第一次学atl ...

  2. STL中mem_fun与mem_fun_ref的区别[转]

    http://www.cnblogs.com/Purple_Xiapei/archive/2012/05/27/2520483.html STL中mem_fun和mem_fun_ref的用法 分类:  ...

  3. [ATL/WTL]_[0基础]_[CBitmap复制图片-截取图片-平铺图片]

    场景: 1.当你须要截取图片部分区域作为某个控件的背景. 2.须要平铺图片到一个大区域让他自己主动放大时. 3.或者须要合并图片时. 代码: CDC sdc; CDC ddc; sdc.CreateC ...

  4. STL front() ,back()和begin(),end()区别

    首先看看vector里面的: reference front(); const_reference front() const; queue里面的: value_type& front(); ...

  5. [ATL/WTL]_[初级]_[关于graphics.DrawImage绘图时显示不正常的问题]

    场景 1.使用win32绘图时, 最简单的api是使用 graphics.DrawImage(image,x,y)来绘制, 可是这个api有个坑,它的图片显示完整和设备分辨率(显卡)有关. 说明 1. ...

  6. [ATL/WTL]_[初级]_[选择目录对话框]

    场景 1.起因是创建标准选择目录对话框时使用了 SHCreateItemFromParsingName 函数, 这个函数支持vista以上系统. 之后再winxp上运行就报错: 无法定位程序输入点 S ...

  7. c++模板类

    c++模板类 理解编译器的编译模板过程 如何组织编写模板程序 前言常遇到询问使用模板到底是否容易的问题,我的回答是:“模板的使用是容易的,但组织编写却不容易”.看看我们几乎每天都能遇到的模板类吧,如S ...

  8. C++-模板的声明和实现为何要放在头文件中

    源: http://blog.csdn.net/lqk1985/archive/2008/10/24/3136364.aspx 如何组织编写模板程序 发表日期: 1/21/2003 12:28:58 ...

  9. c++模板注意事项

    c++模板类 分类: C++2012-08-20 21:28 7108人阅读 评论(2) 收藏 举报 c++编译器instantiationiostreamlinker编程 c++模板类 分类: 数据 ...

随机推荐

  1. HDU_1071——积分求面积,抛物线顶点公式

    Problem Description Ignatius bought a land last week, but he didn't know the area of the land becaus ...

  2. SSLStrip 的未来 —— HTTPS 前端劫持

    前言 在之前介绍的流量劫持文章里,曾提到一种『HTTPS 向下降级』的方案 —— 将页面中的 HTTPS 超链接全都替换成 HTTP 版本,让用户始终以明文的形式进行通信. 看到这,也许大家都会想到一 ...

  3. IOS调试lldb命令常用po

    lldb命令常用(备忘) 假如你准备在模拟器里面运行这个,你可以在“(lldb)”提示的后面输入下面的: (lldb) po $eax LLDB在xcode4.3或者之后的版本里面是默认的调试器.假如 ...

  4. Object -C NSValue -- 笔记

    // //  main.m //  NSValue // //  Created by facial on 26/8/15. //  Copyright (c) 2015 facial_huo. Al ...

  5. HUNNU--湖师大--11410--Eligibility

    [I] Eligibility Regional Contest Director Osama Ismail knows that an individual cannot participate i ...

  6. [Redux] Avoiding Object Mutations with Object.assign() and ...spread

    Learn how to use Object.assign() and the spread operator proposed for ES7 to avoid mutating objects. ...

  7. linux中切换用户方式su和su -的区别

    Using su The  su  command allows users to open a terminal window, and from that terminal start a sub ...

  8. mysql的limit性能,数据库索引问题,dblog问题

    mysql的limit性能,数据库索引问题,dblog问题,redis学习 继续学习. dblog实际上是把日志记录在另一个数据库里面. 问题1: 一张表定义了5个索引,但是sql语句中用到了3个有索 ...

  9. .Net程序员 Solr-5.3之旅 (二)Solr 安装

    阅读目录 引言 Solr5.3环境搭建 Solr5.3创建第一个Core 结尾 引言 一个糟糕的设计有好的表现形式,它会被判死缓,一个好的设计有糟糕的表现形式,它会被判死刑立即执行. 以上摘自一个设计 ...

  10. C#中yield用法

    yield 关键字向编译器指示它所在的方法是迭代器块.编译器生成一个类来实现迭代器块中表示的行为.在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值.这是一个返回值, ...