• 0

  • 455

  • 收藏

走近STL- STL概论

机器猫

机器学习

1星期前

文章目录

本专栏介绍

我的STL专栏,将分为三个模块。

  1. "走近STL"系列文章,讲的是STL的基础,主要是针对STL的常用容器Vector、List和Map快速上手,包括在使用过程中会遇到坑。我的目标是让初接触STL的朋友能快速上手。
  2. “走进STL”系列文章,讲的是STL的深入部分,主要涉及STL的内存分配、容器源码分析、算法源码分析等六大块。(哪六大块?下面会讲到)。这个系列主要是针对想要深入学习STL或者想学习一下STL的编码技法(traits编码技法)的朋友。多学习源码的好处是显而易见的。
  3. “拥抱STL”系列文章,这个模块里面讲的是对“走进STL”模块学习的C++其他技术支持,毕竟没有一定的C++基础的话,直接看源码剖析是很痛苦的。

STL的前世今生

STL,虽然是一套程序库,但却不仅仅是一套一般印象中的程序库,而是一个具有划时代意义的、有着深厚理论基础的发明。
说是软件组件史上的一大突破,也当之无愧。

为了建立数据结构与算法的一套标准,降低其间的耦合关系,以及提升各自的交互性、弹性、独立性,C++社群中诞生了STL.

STL是一个开源项目,所以有很多个版本。在我的这个专栏中使用SGI STL版本,不论是符号命名,还是编码风格上,这个版本的可读性非常高。


STL可不止有容器

对于大部分接触过STL的人来说,对于STL的印象应该是极好的,不过大部分人可能也是简单的将容器和STL的全部画起了等号,最多再加上算法,毕竟我们使用STL常用到的也就那两套头文件。说实话我也前也是这么认为的。
其实STL提供了六大组件,容器和算法只是其中一部分,它们分别是:

容器、算法、迭代器、仿函数、配接器、配置器。

这些组件都是什么?
不要急,就算知道也再看一遍吧。

  • 容器
  • 各种数据结构,如Vector、List、Map,用于存放数据。
  • 算法
  • 各种常见算法如:排序、增删查等。从实现来看,STL算法属于泛型函数。
  • 迭代器
  • 很惊奇,迭代器不属于容器,也不属于算法。
  • 扮演起容器与算法之间的“粘合剂”,是“泛型指针”。
  • 原生指针可以作为一种迭代器,不过迭代器一般是以智能指针的形式存在的。
  • 仿真函数
  • 行为类似函数,从实现来看是一种重载了operator()的类或模板类。
  • 函数指针可视为狭义上的仿真函数。
  • 配接器
  • 说来话长,一种用于修饰容器、迭代器、仿真函数的东西。
  • 配置器
  • 空间配置与管理,如果要深入了解STL代码,则这一块将会是奠基石一般的存在。

来看一下STL六大组件联合工作的图示:
在这里插入图片描述

STL深入学习书籍推荐

如果是为了应用的话呢,看我的“走近STL”系列就好了,我是个力求精简且有趣的人,博客也不会太冗长。
如果想深入了解STL,可以看我的“走进STL”系列和“拥抱STL”。
如果一定要自己看书且有一定的功底,推荐《STL源码剖析

在网上找的基本是繁体版本,这套是简体带目录,画质也不错。

免责声明:文章版权归原作者所有,其内容与观点不代表Unitimes立场,亦不构成任何投资意见或建议。

机器学习

455

相关文章推荐

未登录头像

暂无评论