STL库简介

一、STL库的概念

STL:是C++标准库的重要追组成部分,不仅是一个可以复用的组件库,而且还是一个包含了数据结构和算法的软件框架

二、STL的版本

  • 原始版本
    Alexander Stepanov、 Meng Lee 在惠普实验室完成的原始版本, 是一个开源版本,允许任何人任意运用、拷贝、修改、传播、商业化的使用这些代码,无需付费。仅仅要求向原始版本一样做开源使用,HP版本 -- 所有STL实现版本的始祖版本。
  • P.J版本
    由P.J.Plauger开发,继承自HP版本,被Windows VisualC++采用,不能公开或者修改,缺点是可读性比较低,并且符号命名比较怪异。
  • RW版本
    由Rouge Wage公司开发,也是继承自HP版本, 被C++ Builder采用,不能公开和修改,可读性也不太高。
  • SGL版本
  • 由Silicon Graphics Computer Systems , inc公司开发, 继承自HP版本,被Linux系统的g++/gcc采用,可移植性高,公开并且可以修改甚至贩卖, 从命名风格和编程风格上看,可读性比较高。

三、STL的六大组件

stl的六大组件分别是:仿函数,算法,迭代器,空间配置器(本质是内存池),容器以及配接器。

具体如下所示:

  • 容器(containers):各种数据结构,如 vector,list,deque,set,map等。从实现的角度来看,容器是一种 class template。
  • 算法(algorithms):各种常用算法,提供了执行各种操作的方式,包括对容器内容执行初始化、排序、搜索和转换等操作,比如 sort,search,copy,erase。从实现的角度来看,STL算法是一种 function template。
  • 迭代器(iterators):迭代器用于遍历对象集合的元素,扮演容器与算法之间的胶合剂,是所谓的泛型指针,共有5种类型,以及其他衍生变化。从实现角度来看,迭代器是一种将 operator*,operator->,operator++,operator--等指针操作予以重载的 class template。所有的STL容器附带有自己专属的迭代器,因为只有容器设计者才知道如何遍历自己的元素。
  • 仿函数(functors):行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了 operator() 的 class 或者 class template。
  • 配接器(Adaptor):一种用来修饰容器或者仿函数或迭代器接口的东西。例如 STL 提供的queue 和 stack,就是一种空间配接器,因为它们的底部完全借助于 deque。
  • 空间配置器(allocator):负责空间的配置与管理。从实现的角度来看,配置器是一个实现了动态配置空间、空间管理、空间释放的 class template。

四、STL的重要性

一般在面试和笔试中很容易遇到关于STL的相关问题。

在工作中,我们也会经常用到C++的STL库,STL是C++中的优秀作品,正是因为有了STL库我们对于有些数据结构就不用重新造轮子,帮助我们快速的进行开发。

五、STL库的一些缺点

1.STL库的更新速度较慢,上一版靠谱的是C++98,C++03做了一些修订,C++11出现后已经隔了13年才进一步进行更新。

2.STL一直到现在都没有支持线程安全,并发环境下需要我们自己进行加锁,且锁的力度比较大。

3.STl极度追求效率,导致内部过于复杂,比如类型萃取和迭代器萃取。

4.STL使用会有代码膨胀的问题,可能会因为模板的语法问题导致生成多份代码。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JVM 双亲委派机制详解

文章目录 1. 双亲委派机制2. 证明3. 优势与劣势 1. 双亲委派机制 类加载器用来把类加载到 Java 虚拟机中。从JDK1.2版本开始,类的加载过程采用双亲委派机制,这种机制能更好地保证 Java 平台的安全。 1.定义 如果一个类加载器在接到加载类的请求时&…

react组件渲染性能优化之函数组件-useCallback使用

useCallback主要就是对函数进行缓存,useCallBack这个Hooks主要是解决React.memo不能缓存事件的问题 useCallBack(fn, dependencies) :fn想要缓存的函数,dependencies有关是否更新 fn 的所有响应式值的一个列表 比如:UseCallBackOptimize组件…

(done) NLP+HMM 协作,还有维特比算法

参考视频:https://www.bilibili.com/video/BV1aP4y147gA/?p2&spm_id_frompageDriver&vd_source7a1a0bc74158c6993c7355c5490fc600 (这实际上是 “序列标注任务”) HMM 的训练和预测如下图 训练过程:我们首先先给出一个语…

做一个桌面悬浮翻页时钟

毛玻璃效果翻页桌面悬浮时钟,TopMost(Topmost“True”),不在任务栏显示(ShowInTaskbar“False”),在托盘区显示图标,双击托盘区图标实现最小化和还原,右键托盘图标可选“…

常见网络攻击及解决方案

网络安全是开发中常常会遇到的情况,为什么会遇到网络攻击,网络攻击是如何进行的,如何抵御网络攻击,都是我们需要思考的问题。 为什么会遇到网络攻击? 以下是一些主要的因素: 技术漏洞:软件或操…

web学习记录--(5.14)

1.Sublime安装与汉化 直接点击windows即可下载,安装即可 Thank You - Sublime Text 汉化 Install Package ChineseLocalzation 2.PHPstorm下载以及激活,汉化 直接下载,然后找激活码激活即可 汉化 plugins(插件)/chinese&…

SpringBoot接收参数的19种方式

https://juejin.cn/post/7343243744479625267?share_token6D3AD82C-0404-47A7-949C-CA71F9BC9583

未授权访问:ZooKeeper 未授权访问漏洞

目录 1、漏洞原理 2、环境搭建 3、未授权访问 防御手段 今天继续学习各种未授权访问的知识和相关的实操实验,一共有好多篇,内容主要是参考先知社区的一位大佬的关于未授权访问的好文章,还有其他大佬总结好的文章: 这里附上大…

在Ubuntu中如何解压zip压缩包??

2024年5月15日,周三上午 使用 unzip 命令 unzip 文件名.zip这会将压缩包中的内容解压到当前目录。如果想解压到特定目录,可以使用 -d 选项,例如: unzip 文件名.zip -d 目标目录使用 7-zip 还可以安装 7-zip 工具来解压 ZIP 文件。…

【Python探索之旅】冒泡排序(三种方法)

前言 算法步骤: 代码实现 方法一、嵌套循环 方法二 while循环 方法三、使用生成器表达式 解释: 时间复杂度: 完结撒花 前言 冒泡排序是一种简单的排序算法,它也是一种稳定排序算法。其实现原理是重复扫描待排序序列&#xf…

2025年第十一届北京国际印刷技术展览会

2025年第十一届北京国际印刷技术展览会 展览时间:2025年5月15-19日 展览地点:北京中国国际展览中心(顺义馆) 主办单位:中国印刷及设备器材工业协会中国国际展览中心集团有限公司 承办单位:北京中印协华港国…

海思Hi3065H 200MHz 高性能 RISCV32 A² MCU

这是一款海思自研的RISCV32内核的高性能实时控制专用MCU, 具有高性能、高集成度、高可靠性、易开发的特点,同时还有嵌入式AI能力。 CPU • RISC-V200MHzFPU 存储 • Up to 152KB Code Flash • 8KB Data Flash • 16KB SRAM 个人认为这是MCU梯队非常…

[Linux][网络][高级IO][IO多路转接][select][poll]详细讲解

目录 1.IO多路转接之select1.初识select2.select()3.关于fd_set结构4.关于timeval结构5.理解select执行过程6.select就绪条件7.select特点8.select优点(任何一个多路转接方案,都具备)9.select缺点10.select的一般编写代码的模式11.思考 && 问题 2.IO多路转接…

【PB案例学习笔记】-02 目录浏览器

写在前面 这是PB案例学习笔记系列文章的第二篇,该系列文章适合具有一定PB基础的读者, 通过一个个由浅入深的编程实战案例学习,提高编程技巧,以保证小伙伴们能应付公司的各种开发需求。 文章中设计到的源码,小凡都上…

基于Django实现的(bert)深度学习文本相似度检测系统设计

基于Django实现的(bert)深度学习文本相似度检测系统设计 开发语言:Python 数据库:MySQL所用到的知识:Django框架工具:pycharm、Navicat、Maven 系统功能实现 登录页面 注册页面:用户账号,密码…

05-14 周二 PyTorch动态量化和静态量化理解

05-14 周二 PyTorch动态量化和静态量化理解 时间版本修改人描述2024年5月14日10:44:30V0.1宋全恒新建文档2024年5月14日16:28:16V1.0宋全恒填充了PyTorch对于两种量化方式的内容 简介 Pytorch动态量化 设计神经网络时,可以进行许多权衡。在模型开发和训练期间&…

Dilworth定理:最少的下降序列个数就等于整个序列最长上升子序列的长度

概念如下&#xff1a; 狄尔沃斯定理_百度百科 (baidu.com) 本质就是找要求序列中最长的单调的子序列&#xff08;不一定连续&#xff09;的长度。 模板如下&#xff1a; 时间复杂度为O&#xff08;N^2&#xff09; #include<iostream>using namespace std;int dp[100…

RK3568平台开发系列讲解(SPI篇)SPI数据的传输

🚀返回专栏总目录 文章目录 一、数据结构1.1、spi_transfer 结构体1.2、spi_message二、数据发送程序分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢 参考资料: spi_transferspi_message一、数据结构 spi 数据传输主要使用了 spi_message 和 spi_transfer 结构…

二叉树的前序遍历(leetcode)

144. 二叉树的前序遍历 - 力扣&#xff08;LeetCode&#xff09; 给你二叉树的根节点 root &#xff0c;返回它节点值的 前序 遍历。 这道题的启发性真的很强 &#xff0c;这里必须传入i的指针进去&#xff0c;下一次栈帧i&#xff0c;但回到了上一层i又变回到了原来的i&#…

docker network ls(用于列出 Docker 主机上的所有网络)

docker network ls 是一个 Docker 命令&#xff0c;用于列出 Docker 主机上的所有网络。Docker 允许你创建自定义的网络&#xff0c;以便更好地控制容器之间的通信。 当你运行 docker network ls 命令时&#xff0c;你可能会看到如下类似的输出&#xff08;输出可能会根据你的…