通过一篇文章让你了解STL是什么

STL

  • 前言
  • 一、什么是STL
  • 二、STL的版本
    • 原始版本
    • P. J. 版本
    • RW版本
    • SGI版本
  • 三、STL的六大组件
  • 四、STL的重要性
    • 试题
    • 面经
  • 五、如何学习STL
  • 六、STL的缺陷


前言

STL(Standard Template Library)是C++编程语言的一个标准库,包含了一系列模板类和函数,用于实现常见的数据结构和算法。它分为容器(Containers)、迭代器(Iterators)、算法(Algorithms)和配接器(Adapters)四个部分。STL的目的是提供高效、灵活、可复用的代码,以便快速构建高质量的C++程序。通过使用STL,程序员可以避免重新发明轮子,提高代码的可读性和可维护性。


一、什么是STL

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。

二、STL的版本

原始版本

Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使用。 HP 版本–所有STL实现版本的始祖。

P. J. 版本

由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低,符号命名比较怪异。

RW版本

由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。

SGI版本

由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们学习STL要阅读部分源代码,主要参考的就是这个版本。

三、STL的六大组件

在这里插入图片描述

STL(Standard Template Library,标准模板库)是C++语言的一个标准库,提供了一系列的模板类和函数,用于常见的数据结构和算法。

STL库主要由以下六大组件组成:

  1. 容器(Containers):提供了多种容器类模板,如vectorlistdequesetmap等,用于存储和管理数据。

  2. 算法(Algorithms):提供了一系列的算法函数模板,如排序、查找、合并、计数等,用于对容器中的数据进行操作和处理。

  3. 迭代器(Iterators):提供了一种通用的访问容器元素的方式,可以像指针一样遍历容器中的元素,支持前向、后向、双向和随机访问等不同的迭代器类型。

  4. 函数对象(Function Objects):提供了一种能够以函数的方式使用的对象,它可以用于算法中的比较、排序等操作。

  5. 适配器(Adapters):提供了一些实用的类模板,用于将容器和算法相互适配,以满足特定的需求。

  6. 分配器(Allocators):提供了一种可扩展的内存分配接口,用于控制容器的内存分配和释放过程。

这六大组件共同组成了STL的核心功能,它们的设计和实现都遵循一些统一的原则和规范,使得STL库易于使用和扩展,同时也提供了高效的性能和可靠的功能。在C++编程中,STL库是一个非常重要和常用的工具,能够大大简化代码的编写和维护工作。

四、STL的重要性

试题

把二叉树打印成多行
重建二叉树
用两个栈实现队列

面经

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。

五、如何学习STL

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
简单总结一下:学习STL的三个境界:能用,明理,能扩展 。

六、STL的缺陷

  1. STL库的更新太慢了。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。
  2. STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。
  3. STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。
  4. STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/577685.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Jmeter之Beanshell详解

一、 Beanshell概念 Beanshell: BeanShell是一种完全符合Java语法规范的脚本语言,并且又拥有自己的一些语法和方法;BeanShell是一种松散类型的脚本语言(这点和JS类似);BeanShell是用Java写成的,一个小型的、免费的、可以下载的、嵌入式的Java源代码解释器,具有对象脚本语言特性…

RGB灯珠的控制-单片机通用模板

RGB灯珠的控制-单片机通用模板 一、RGB控制的原理二、RGB.c的实现三、RGB.h的实现四、color色彩空间变换以及控制渐变一、RGB控制的原理 ①通过IO发送脉冲识别0/1编码,组合24Bit的RGB数据,从而控制RGB;②每个RGB灯珠通过DIN、DOU进行级联起来;③通过HSV色彩转换成RGB从而控…

BUUCTF--web(2)

1、[HCTF 2018]admin1 打开题目后发现有注册和登录两个页面,因为题目提示admin,尝试用admin进行爆破 爆破得到密码为123 登录得到flag 2、[护网杯 2018]easy_tornado1 打开题目后有三个文件,分别打开查看 在url地址栏中发现包含两个参数&a…

[图解]领域驱动设计伪创新-为什么互联网是重灾区-01

0 00:00:00,840 --> 00:00:03,270 今天我们来说一下 1 00:00:03,650 --> 00:00:06,255 领域驱动设计伪创新 2 00:00:06,255 --> 00:00:08,860 为什么互联网是重灾区 3 00:00:09,500 --> 00:00:12,610 这个我们分几个视频来讲 4 00:00:15,620 --> 00:00:17,5…

FIB和RIB基础

1.思考以下的topo从数据层面和控制层面分别是如何通信的 (1)数据层面;数据包从PC1经过AR1 AR2最后到达PC2,这就是数据层面的通信。 (2)控制层面:PC2所在的网段192.168.2.0/24是经过AR2传递给AR…

TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测

文章目录 效果一览文章概述 订阅专栏只能获取一份代码部分源码参考资料 效果一览 文章概述 TCN-LSTM时间卷积网络长短期记忆网络多输入多输出回归预测 matlab2021 订阅专栏只能获取一份代码 部分源码 %------------------------------------------------------------------…

SpringBoot模块化时遇到Could not autowire. No beans of ‘xxxService‘ type found.错误

SpringBoot模块化时遇到Could not autowire. No beans of xxxService type found.错误 一、SpringBoot模块化时遇到Could not autowire. No beans of xxxService type found.错误二、解决办法一三、解决办法二 一、SpringBoot模块化时遇到Could not autowire. No beans of ‘xx…

快手面试算法真题

按照html中的标签层数遍历节点名。 例如&#xff1a;html代码如下&#xff1a;(上面的数字表示层数) <!-- 1 --><div class"div1"><!-- 2 --><span class"span1"></span><!-- 2 --><p class"p1"><…

架构师系列- JVM(三)- 类加载

通过字节码&#xff0c;我们了解了class文件的结构 通过运行数据区&#xff0c;我们了解了jvm内部的内存划分及结构 接下来&#xff0c;让我们看看&#xff0c;字节码怎么进入jvm的内存空间&#xff0c;各自进入那个空间&#xff0c;以及怎么跑起来。 4.1 加载 4.1.1 概述 …

天线驻波比参数测试方法

驻波比也叫电压驻波比&#xff0c;是指传输线中最大电压与最小电压的比值&#xff0c;是衡量天线与馈线匹配程度的重要参数&#xff0c;影响着信号传输的质量和效率。因此&#xff0c;驻波比测试是天线测试的重要环节。那么&#xff0c;天线驻波比测试都有哪些测试方法呢&#…

[C++ QT项目实战]----C++ QT系统登陆界面设计

前言 在C QT项目开发过程中&#xff0c;设计系统登录界面可以使用QT框架来实现。以下是一个简单的系统登录界面设计示例&#xff1a; 创建登录界面UI&#xff1a;可以使用QT Designer来设计登录界面的UI&#xff0c;包括用户名输入框、密码输入框、登录按钮等。在QT Designer中…

C++ 头文件/宏冲突问题解决?如何解决?

&#x1f3c6;本文收录于「Bug调优」专栏&#xff0c;主要记录项目实战过程中的Bug之前因后果及提供真实有效的解决方案&#xff0c;希望能够助你一臂之力&#xff0c;帮你早日登顶实现财富自由&#x1f680;&#xff1b;同时&#xff0c;欢迎大家关注&&收藏&&…

untiy avpro播放超过8K视频的解决方案

安转LAV Filters解码器&#xff0c;然后指定Avpro使用这个解码器播放即可 第一步 安装解码器 下载链接 第二步 AVPro设置 MediaPlayer脚本中一共两处

element 分页切换时:current-page无效 页数不会跟着一起切换

问题回溯&#xff1a;使用el-pagination组件 选择切换当前分页 页数为2 问题结果&#xff1a;el-pagination组件 当前页切换失败 一直都是 1&#xff0c;接口传参分页数据是2&#xff0c;打印当前分页也是2 解决方案1&#xff1a;使用 current-page参数 .sync 修饰符 解决方案2…

服务器数据恢复—Storwize V3700存储数据恢复案例

服务器存储数据恢复环境&#xff1a; 某品牌Storwize V3700存储&#xff0c;10块硬盘组建了2组Mdisk加入到一个存储池中&#xff0c;一共创建了1个通用卷来存放数据&#xff0c;主要数据为oracle数据库。 服务器存储故障&#xff1a; 其中一组Mdisk中两块磁盘出现故障离线&…

PDF 书签制作与调整 从可编辑、不可编辑 PDF 文档创建书签的方法

本文是对以前发表的旧文拆分&#xff0c;因为原文主题太多&#xff0c;过长&#xff0c;特另起一篇分述。 第一部分 由可编辑 PDF 文档创建书签 方法 1. Adobe Acrobat Pro autobookmark AutoBookmark 是一个可用于 Adobe Acrobat 自动生成书签的插件。 官方下载地址&…

c语言指针的应用场景

​ 1.什么是指针&#xff1f; 当我们提起指针的时候&#xff0c;可能第一反应会露出惊喜的表情 &#xff08;但是我们其实没必要那么慌&#xff0c;因为当我们随着我们学习的越来越深入就会发现&#xff0c;指针虽然看起来难&#xff0c;实际上也不怎么简单。哈哈哈开玩笑的&a…

Vitis HLS 学习笔记--Syn Report解读(1)

目录 1. 介绍 2. 示例一 2.1 HLS 代码 2.2 Report 解读 2.2.1 General Information 2.2.2 Timing Estimate 2.2.3 Performance & Resource Estimates 2.2.4 HW interfaces 2.2.4.1 硬件接口报告 2.2.4.2 导出至 Vivado 中的 IP 2.2.4.3 Port-Level Protocols 端…

如何安全进行速卖通自养号测评操作?

对于新加入的卖家而言&#xff0c;进行销量测评显得尤为关键。速卖通平台上的新店往往难以获得活动的扶持&#xff0c;且初始流量相当有限。因此&#xff0c;开店的首要任务便是积极展开测评工作&#xff0c;努力积累初始的评论和销售记录。测评的益处颇为显著&#xff0c;它不…

【Redis 开发】Redisson

Redisson RedissonRedisson分布式锁Redisson可重入锁Redission解决超时释放的问题Redission解决锁的判断一次性问题Redission分布式锁主从一致性问题 Redisson Redisson是一个在Redis的基础上实现的java驻内存数据网格&#xff0c;就是提供了一系列的分布式的java对象 官方地址…