走近STL- STL概论

举报
看,未来 发表于 2020/12/30 00:09:50 2020/12/30
【摘要】 文章目录 本专栏介绍STL的前世今生STL可不止有容器STL深入学习书籍推荐 本专栏介绍 我的STL专栏,将分为三个模块。 "走近STL"系列文章,讲的是STL的基础,主要是针对STL的常用容器Vector、List和Map快速上手,包括在使用过程中会遇到坑。我的目标是让初接触STL的朋友能快速上手。“走进STL”系列文章,讲的是STL的深...

本专栏介绍

我的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源码剖析

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

文章来源: lion-wu.blog.csdn.net,作者:看,未来,版权归原作者所有,如需转载,请联系作者。

原文链接:lion-wu.blog.csdn.net/article/details/105414735

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。