STL 源代码分析

chap1
 1.
   STL的价值在于两个方面:首先就像MFC和VCL一样为我们的RAID开发提供了一些必要的支持。另一个方面是从设计模式的角度出发,
真正实现了一个以泛型思维为基础的抽象实现库。也就是说,STL所实现的是依据泛型思维设起来的一个概念结构,这个是以抽象概念为主体而非以
实际的类为主体的结构。形成了一个严谨的接口标准。在这个抽象的接口下,各个组件具有最大的独立性,通过所谓的iterator 来将不同的组件
粘合起来,或者以adapter实现相互之间的转接。或者以funtor实现动态地选择某种策略。
尽管C++语言能够实现基本的类型的参数化,但是还没有上升到STL的如此高度。
 2. STL的6大组件
    1.container 常见的数据结构如vector ,list ,deque set map 用来存放数据。在具体实现的时候是一个class的模板类,具体实现见后文。
    2. algorithm 各种常见的算法,sort ,search ,copy ,erase 算法的实现是通过函数模板来实现的。
    3. iterator 相当于smart pointer从实现的角度来说,iterator 是将 operator ++, opertator --, operator->,operator*相关操作加以
重载的 class template
    4. functor可以作为算法的某种策略policy,在实现的角度看,functor是一种重载了operator()的类模板
    5. adapters 一种是用来修饰容器的或者仿函数或者迭代器接口的东西
    6. allocator 是负责空间的分配和管理。从实现的角度来说,配置器是一个实现了动态空间配置的class template
我后面关心的内容可能是SGI版本的实现;
3. SGI STL编译器组态设置
在一些编译器中对一些功能并不完全支持只能通过config文件来配置:
如果 编译器不能很好地处理模板类的静态函数,那么需要定义__STL_STATIC_TEMPLATE_MEMBER_BUG
如果编译器支持partial specilization of class template __STL_CLASS_PARTIAL_SPECIFICATION
如果编译器支持函数模板的部分specilazation就定义__STL_FUNCTION_TMPL_PARTIAL_ORDER
如果编译器支持模板类函数的成员变量是模板类__STL_MEMBER TEMPLATE
如果编译器支持非类型模板参数那么定义__STL_NO_TYPE_TMPL_PARAM_BUG
如果编译器没有->操作符就定义__SGI_STL_NO_ARROW_OPERTATOR
如果编译器支持异常处理那么__STL_USE_EXCEPTIONS
如果编译器支持多线程__STL_WIN32THREAD
如果编译器支持assert那么定义__STL_ASSERTATION


 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值