Chinaunix首页 | 论坛 | 博客
  • 博客访问: 238442
  • 博文数量: 253
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 3
  • 用 户 组: 普通用户
  • 注册时间: 2014-09-21 12:29
文章分类

全部博文(253)

文章存档

2014年(253)

我的朋友

分类: C/C++

2014-09-21 12:53:59

原文地址:STL源码剖析—概述(1) 作者:andyhzw

STL源码版本:3.3


概述:
    C++标准链接库中隶属 STL   范围者,粗估当在 80%以上。对软件开发而言,STL 是尖?利兵,可以节省你许多时间。
    对编程技术而言,STL   是金柜石室—所有与编程工作最有直接密切关联的一些最被广泛运用的数据结构和算法,STL都有实作,并符合最佳(或极佳)效率。
    不仅如此,STL   的设计思维,把我们提升到另一个思想高点,在那里,对象的耦合性(coupling)极低,复用性(reusability)极高,各种组件可以独立设计又可以灵活无罅地结合在一起。

1,STL3.3




2,STL  六大组件功能与运用
    STL提供六大组件,彼此可以组合套用:
        1.容器(containers):各种数据结构,如vector, list, deque, set, map,用来存放数据。从实现的角度看,STL  容器是一种 class template。

        2.算法(algorithms):各种常用算法如sort, search, copy, erase…,。从实现的角度看,STL  算法是一种 function template。

        3.迭代器(iterators):扮演容器与算法之间的胶着剂,是所谓的「泛型指标」。共有五种类型,以及其它衍生变化。从实现的角度看,迭代器
是一种将operator*, operator->, operator++, operator--等指标相关操作予以多载化的 class template。所有STL容器都附带有自己专属的迭代器—是的,只有容器设计者才知道如何巡访自己的元素。原生指标(native pointer)也是一种迭代器。

        4.仿函数(functors):行为类似函数,可做为算法的某种策略(policy)。从实作的角度看,仿函数是一种重载了 operator()的 class   或
class template。一般函式指标可视为狭义的仿函式。

        5.配接器(adapters):一种用来修饰容器(containers)或仿函数(functors)或迭代器(iterators)接口的东西。例如 STL  提供的 queue  和
stack,虽然看似容器,其实只能算是一种容器配接器,因为它们的底部完全借重 deque,所有动作都由底层的 deque供应。改变functor接口者,称为function adapter,改变container接口者,称为container adapter,改变iterator界面者,称为iterator adapter。

        6.配置器(allocators):负责空间配置与管理。从实现的角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的 class template。


        其相互关系,如下图所示:

        STL六大组件的交互关系:Container透过Allocator取得数据储存空间,Algorithm透过Iterator存取Container内容,Functor可以协助 Algorithm完成不同的策略变化,Adapter可以修饰或套接 Functor。



3,STL文件分布与简介
    1)C++标准规范下的 C  头文件(无扩展名),例如cstdio, cstdlib, cstring… 
    2)C++标准链接库中不属于 STL范畴者,例如 stream, string…相关文件。
    3)STL标准头文件(无扩展名),例如vector, deque, list, map, algorithm, functional… 
    4)C++ Standard  定案前,HP  所规范的 STL  头文件,例如vector.h, deque.h, list.h, map.h, algo.h, function.h… 
    5)STL   内部文件(STL  真正实作于此),例如stl_vector.h, stl_deque.h, stl_list.h, stl_map.h, stl_algo.h, stl_function.h…





参考书籍:
1,《STL源码剖析》



阅读(305) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~