C++ STL简介

STL是C++中的标准模板库,由AlexanderStepanov创建,旨在提高代码复用性。它包含容器(如vector、list)、算法(如sort、search)和迭代器等组件,通过迭代器连接容器和算法。STL的历史可追溯到1979年,其后成为C++标准的一部分。理解和掌握STL能提升C++编程效率。
摘要由CSDN通过智能技术生成


前言

对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详解

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

余识-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值