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