STL基础知识

STL

STL概念的简单总结


STL基本概念

  • STL(Standard Template Library,标准模板库)
  • STL 从广义上分为: 容器(container) 算法(algorithm) 迭代器(iterator)
  • 容器算法之间通过迭代器进行无缝连接。STL几乎所有的代码都采用了模板类或者模板函数,这相比传统的由函数和类组成的库来说提供了更好的代码重用机会。
  • 优点:STL 具有高可重用性高性能高移植性跨平台的优点。

STL六大组件

STL提供了六大组件,彼此之间可以组合套用,这六大组件分别是:容器、算法、迭代器、仿函数、适配器、空间配置器。STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数

  • 容器:各种数据结构:如vector,list,deque,set,map等用来存放数据,从实现角度看,STL容器是一种class template


  • 算法:各种常用的算法:如sort、find、copy、for_each等。从实现的角度来看,STL算法是一种function tempalte


  • 迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template.所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。


  • 仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template


  • 适配器:一种用来修饰容器或者仿函数迭代器接口的东西。


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

STL的优点

  • 高可重用性:STL 中几乎所有的代码都采用了模板类和模版函数的方式实现,这相比于传统的由函数和类组成的库来说提供了更好的代码重用机会
  • 高性能:如 map 可以高效地从十万条记录里面查找出指定的记录,因为map是采用红黑树的变体实现的。(红黑树是平衡二叉树的一种)
  • 高移植性:如在项目 A 上用 STL 编写的模块,可以直接移植到项目 B 上。
  • 核心:将数据结构和算法进行分离,彼此独立设计,最后再通过迭代器将它们撮合在一起。

STL组件的三大头

  • 容器:(序列式容器 和 关联式容器)
    • 序列式容器:容器元素在容器中的位置是由元素进入容器的时间和地点来决定。vector容器、deque容器、list容器、stack容器、queue容器
    • 关联式容器:容器已经有了一定的规则,容器元素在容器中的位置由我的规则来决定。set/multiset容器 map/multimap容器
  • 算法:(质变算法 和 非质变算法)
    • 质变算法:是指运算过程中会更改区间内的元素的内容。例如拷贝,替换,删除等等
    • 非质变算法:是指运算过程中不会更改区间内的元素内容,例如查找、计数、遍历、寻找极值等等
  • 迭代器:(容器与算法之间的胶合剂)
    • 输入迭代器:提供对数据的只读访问,只读,支持++==!=
    • 输出迭代器:提供对数据的只写访问,只写,支持++
    • 前向迭代器:提供读写操作,并能向前推进迭代器,读写,支持++==!=
    • 双向迭代器:提供读写操作,并能向前和向后操作,读写,支持++
    • 随机访问迭代器:提供读写操作,并能在数据中随机移动,读写,支持++[n]-n<<=>>=

猜你喜欢

转载自blog.csdn.net/B_Nemo/article/details/80526262