C++ STL简介
创始人
2024-05-13 07:55:16

文章目录

  • 前言
  • 一、STL概述
  • 二、STL历史
  • 三、STL六大组件功能与运用


前言

对C/C++学习感兴趣的可以看看这篇文章哦:C/C++教程

一、STL概述

在软件行业,一直都希望建立一种可以重复运用的东西和一种可以制造出“可重复使用的东西”的方法,来让程序员的心血不至于随着时间迁移而烟消云散

子程序、程序、函数、类别、函数库、类别库、各种组件、结构化设计、模块化设计、面向对象设计、模式

以上所有无一不是软件工程为这一目标的的奋斗史,为的就是提升代码的复用性

而复用性必须要建立在某种标准之上

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

STL的价值主要在两个方面:

  1. 就低层次而言,STL带给我们一套极具实用性的零部件,以及一个整合的组织
  2. 就高层次而言,STL还带给我们一个高层次、以泛型思维为基础的、系统的、条理分明的“软件组件分类学”

STL是一个抽象概念库,这些抽象概念包括:

  • 可被复制
  • 默认构造
  • 可判断是否相等
  • 可比较大小
  • 具有输入功能的迭代器
  • 具有输出功能的迭代器
  • 单向/双向迭代器
  • 随机存取迭代器
  • 一元函数
  • 二元函数
  • ……

STL的创新在于具体的叙述了这些抽象概念,并加以系统化

即:STL实现的是以抽象概念为主体的结构,而不是我们常见的具体的class

进而形成了严谨的接口标准,在这样的接口下,任何组件都有最大的独立性,并用迭代器胶合起来、或用适配器互相配接、或以仿函数动态选择某种策略

C++的类允许我们自定义类别,其模板允许我们将类别参数化,这两者的结合通过traits编程技法,成就了STL

二、STL历史

STL是由Alexander Stepanov创建于1979年前后,当时也是C++诞生的年代(1983年)

没想到吧,STL甚至比C++诞生的还早

在1993年,Alexander Stepanov带着它一手创建的STL,与C++标准委员会有了第一次接触

当时Alexander Stepanov给C++标准委员会作了一个演讲,讲题是:The Science of C++ Programming

从该讲题的名字也能看出,其理论性很强,但却很受欢迎

之后便顺利的提交了相关提案到委员会,最后也以80%的赞成,成功进入C++标准化的正式流程

其影响非常巨大,比如C++原本就有的stream,string等也都用模板重新写了一遍,至此,C++中几乎到处都是模板

三、STL六大组件功能与运用

STL共给我们提供了六大组件,彼此可以组合套用

  1. 容器:各种数据结构,比如常见的vector、list、set、map等等,用于存放数据
  2. 算法:各种常用的算法,比如sort、search、copy、erase,从实现角度来看,STL算法是一种函数模板
  3. 迭代器:其扮演着容器与算法之间的胶合剂,即“泛型指针”,共有5种类型,从实现角度看,迭代器是一种将各类指针相关的操作进行重载的类模板,所有容器都附带自己专属的迭代器

因为只有设计者才知道怎么遍历自己的元素

  1. 仿函数:行为类似函数,可作为算法的某种策略,从实现角度看,仿函数是一种重载了()的类或类模板
  2. 配接器:一种用于修饰容器或仿函数或迭代器接口的东西,比如STL中的queue与stark,虽然看似容器,其实是容器适配器,因为它们底层完全由deque来完成
  3. 配置器:负责控件配置和管理,从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的类模板

六大组件之间的关系为:容器通过配置器取得内存,算法通过迭代器存取容器中的内容,仿函数可以协助算法完成不同的策略变化,而适配器这可以修饰或套接仿函数

目前STL已经是C++标准程序库的一大组成部分,因此所有的C++编译器都一定持有一份STL源码,就在各个C++头文件中

STL并非以二进制程序出现,而是直接提供源代码

按C++标准,所有的标准头文件都不在有扩展名,比如C中常见的.h,但或许是为了兼容,一些STL版本两种类型的头文件都存在

比如在VS中,就可以很方便的查看其源码:

在这里插入图片描述
不过没有一定的功力,其源码应该是很难看得懂的

但对于我们C/C++开发者而言,并没有太大的必要去弄懂STL源码

想要了解STL方方面面的内容如何使用,可以参照我的另一篇文章:STL详解

相关内容

热门资讯

猫咪吃了塑料袋怎么办 猫咪误食... 你知道吗?塑料袋放久了会长猫哦!要说猫咪对塑料袋的喜爱程度完完全全可以媲美纸箱家里只要一有塑料袋的响...
世界上最漂亮的人 世界上最漂亮... 此前在某网上,选出了全球265万颜值姣好的女性。从这些数量庞大的女性群体中,人们投票选出了心目中最美...
demo什么意思 demo版本... 618快到了,各位的小金库大概也在准备开闸放水了吧。没有小金库的,也该向老婆撒娇卖萌服个软了,一切只...
北京的名胜古迹 北京最著名的景... 北京从元代开始,逐渐走上帝国首都的道路,先是成为大辽朝五大首都之一的南京城,随着金灭辽,金代从海陵王...