STL简介

STL基本概念

  • STL(Standard Template Libray, 标准模板库)——基于泛型编程(函数模板和类模板)实现常用数据结构和算法的一套标准库。
  • STL从广义上分为:容器(container)、算法(algorithm)和迭代器(iterator)
  • STL几乎所有代码都采用了函数模板和类模板

STL的六大组件

STL可分为六大组件:容器、算法、迭代器、仿函数、适配器(配接器)和空间分配器

  • 容器(Container) —— STL定义的各种数据结构,用于存放数据;包括vector、list、queue、map、set、stack、hash_map等。从实现的角度来看,STL容器是一种class template。
  • 算法(Algorithm) —— STL针对容器中的数据处理提供的各种算法,这些算法包括排序、查找、搜索、修改、数值运算符。从实现的角度来看,STL算法是一种 function template。
  • 迭代器(Iterator) —— 是容器与算法之间的胶合剂,是所谓的“泛型指针”。 STL提供迭代器来实现对容器中数据元素的访问,所有STL容器都有自己专属的迭代器,只有容器本身才知道如何遍历自己的元素。从实现的角度来看,迭代器是一种将 operator*、operator->、operator++、operator- - 等指针相关操作进行重载的class template。
  • 仿函数(Functor) —— 行为类似函数,可作为算法的某种策略(policy)。从实现的角度来看,仿函数是一种重载了operator()的class或class template。一般的函数指针也可视为狭义的仿函数。
  • 适配器(Adapter) —— 一种用来修饰容器、仿函数、迭代器接口的东西。例如:STL提供的queue 和 stack,虽然看似容器,但其实只能算是一种容器配接器,因为它们的底部完全借助deque,所有操作都由底层的deque供应。改变 functors接口者,称为function adapter;改变 container 接口者,称为container adapter;改变iterator接口者,称为iterator adapter。
  • 配置器(Allocator) —— 负责空间配置与管理。从实现的角度来看,配置器是一个实现了动态空间配置、空间管理、空间释放的class template。

这六大组件之间的交互关系为:

 容器 通过 配置器 取得数据的存储空间,

 算法 通过 迭代器 存取容器的数据,

 仿函数 可以协助 算法 完成不同的策略变化,

 适配器 可以修饰 容器、仿函数及迭代器的接口。

容器

容器可分为序列式容器关联式容器

  • 序列式容器:强调值的位置顺序,序列式容器中的每个元素都有固定的位置
  • 关联式容器:二叉树结构,各元素之间没有严格的物理上的顺序关系。

算法

算法可分为质变算法非质变算法

  • 质变算法:运算过程中会改变区间内的元素的内容。例如拷贝、替换、删除等
  • 非质变算法:运算过程中不会改变区间内的元素的内容。例如查找、计数、遍历、找最大最小值等。

迭代器种类

种类 功能 支持运算
输入迭代器 对数据的只读访问 只读,支持++、==、!=
输出迭代器 对数据的只写访问 只写,支持++
前向迭代器 读写操作,并能向前推进迭代器 读写,支持++、==、!=
双向迭代器 读写操作,并能向前和向后操作 读写,支持++、–
随机访问迭代器 读写操作,可以跳跃访问任意数据,功能最强的迭代器 读写,支持++、–、[n]、-n、<、<=、>、>=

常用容器中的迭代器为双向迭代器和随机访问迭代器。

STL常用容器

  • string
  • vector
  • deque
  • stack
  • queue
  • list
  • set/multiset
  • map/multimap

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