首页 > 代码库 > 重温《STL源码剖析》笔记 第一章

重温《STL源码剖析》笔记 第一章

                     源码之前,了无秘密。 --侯杰

经典的书,确实每看一遍都能重新收获一遍:

第一章:STL简介

  STL的设计思维:对象的耦合性极低,复用性极高,符合开发封闭原则的程序库。

 

  STL的价值:1.带给我们一套极具实用价值的零部件,以及一个整合的组织。

        2.带给我们一个高层次的以泛型思维为基础的、系统化的、条理分明的“软件组件分类学”。

 

  在STL接口之下,任何组件都有最大的独立性,并以所谓迭代器胶合起来,或以配接器互相配接,或以所

  谓仿函数动态选择某种策略。

 

  STL六大组件:1.容器(containers):各种数据结构,如vector,list,deque,set,map用来存放数据。

         2.算法(algorithms):各种常用算法,如sort,search,copy,erase,etc。从实现的角度看

          STL算法是一种function template

         3.迭代器(iterators):扮演容器与算法之间的胶合剂,是“泛型指针”。一种将operator*,

          operator->,operator++,operator--等予以重载的class template。

          4.仿函数(functors):行为类似函数,可作为算法的某种策略。一种重载了operator()的class

          或class template.一般函数指针可视为狭义的仿函数

          5.配接器(adapters):一种是用来修饰容器、仿函数、迭代器接口的东西。比如:queue

          和stack是一个容器配接器,所有操作由底层deque供应。

          6.配置器:负责空间配置与管理。实现了动态空间配置、空间管理、空间释放的

          class template

 

  STL六大组件的交互关系:Container通过Allocator取得数据存储空间;Algorithms通过Iterator存取

  Container内容,Functor可以协助Algorithm完成不同的策略变化(比如qsor的最后一个参数),Adapter

  可以修饰或套接Functor。

  图形如下:

 

  GNU:GNU is Not Unix   是不是递归了,呵呵--

 

  STL版本,最早的是HP版本,本书介绍的是SGI STL版本

 

  美妙的源代码:

template<class Interactor, class T>Interactor find(Interactor first, Interactor last, const T& value) {    while(first != last && *first != value) {        ++first;    }    return first;} #if defined(_STL_NEED_BOOL)    typedef int bool;# define true 1# define false 0#endif

 

  采用前闭后开区间表示法[)。迭代器last所指的是“最后一个元素的下一个位置”

 

  仿函数代码实现:

 1 template<class T> 2 struct plus { 3     T operator() (const T& x, const T& y) const { 4         return x+y; 5     } 6 }; 7 int main() { 8     //以下产生仿函数对象 9     plus<int> plusobj;10     //以下使用仿函数,就像使用一般函数一样11     cout << plusobj(3,5) << endl;    //812     //以下直接产生仿函数的临时对象(第一对小括号),并调用之(第二对括号)13     cout << plus<int>()(4,6) <<endl;    //10

 

重温《STL源码剖析》笔记 第一章