STL简介

  • STL概论
  • 六大组件
    • 容器(containers)
    • 算法(algorithms)
    • 迭代器(iterators)
    • 仿函数(functors)
    • 配接器(adapters)
    • 配置器(allocators)
  • 参考资料

STL概论

长久以来,软件界一直希望建立一种可复用的东西,让工程师/程序员的心血不至于随时间迁移、人事异动而烟消云散,从子程序、函数、类别,到函数库、类别库、各种组件,从结构化设计、模块化设计、面向对象设计,到模式的归纳整理,无一不是软件工程的漫漫奋斗史。

为的就是复用性的提升。

为了建立数据结构和算法的一套标准,并降低其间的耦合关系,以提升各自的独立性、弹性、交互操作性,C++诞生了STL。

STL(Standard Template Library),即标准模板库,是一个具有工业强度的,高效的C++程序库。它被容纳于C++标准程序库(C++ Standard Library)中,是ANSI/ISO C++标准中最新的也是极具革命性的一部分。该库包含了诸多在计算机科学领域里所常用的基本数据结构和基本算法。为广大C++程序员们提供了一个可扩展的应用框架,高度体现了软件的可复用性。

从逻辑层次来看,在STL中体现了泛型化程序设计的思想(generic programming),引入了诸多新的名词,比如像需求(requirements),概念(concept),模型(model),容器(container),算法(algorithmn),迭代器(iterator)等,与OOP(object-oriented programming)中的多态(polymorphism)一样,泛型也是一种软件的复用技术。

从实现层次看,整个STL是以一种类型参数化(type parameterized)的方式实现的,这种方式基于一个在早先C++标准中没有出现的语言特性–模板(template)。如果查阅任何一个版本的STL源代码,你就会发现,模板作为构成整个STL的基石是一件千真万确的事情,除此之外,还有许多C++的新特性为STL的实现提供了方便。

六大组件

STL提供了六大组件,彼此可以组合套用:

容器(containers)

各种数据结构,如vector、list、deque、set、map用来存放数据,以模板类的方法提供。为了访问容器中的数据,可以使用由容器类输出的迭代器;

算法(algorithms)

算法是用来操作容器中的数据的模板函数,各种常用算法如sort、search、copy、erase等;

迭代器(iterators)

扮演容器和算法之间的“胶合剂”,是所谓额“泛型指针”,迭代器提供了访问容器中对象的方法,共有五种类型,从实现的角度看,迭代器是一种将operator*,operator->,operator++,operator–等指针相关操作予以重载的class template,原生指针也是一种迭代器;

仿函数(functors)

行为类似于函数,可作为算法的某种策略,仿函数是一种重载了operator()的class或class template,一般函数可以视为狭义的仿函数;

配接器(adapters)

一种用来修饰容器、仿函数或迭代器接口的东西;

配置器(allocators)

负责空间配置与管理;

后面,我们会对这六大组件进行源码层次的分析。

参考资料

侯捷 《STL源码剖析》

你可能感兴趣的:(c++)