初识STL(标准模板库)

目录

​编辑

什么是STL

STL的版本

 STL的六大组件

如何学习STL

STL的优势

 

STL的缺陷

 



 

⭐什么是STL

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

⭐STL的版本

  • 原始版本
    • Alexander StepanovMeng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意 运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使 用。 HP 版本--所有STL实现版本的始祖。
  • P. J. 版本
    • P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低, 符号命名比较怪异。
  • RW版本
    • Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。
  • SGI版本
    • Silicon Graphics Computer SystemsInc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码, 主要参考的就是这个版本。

 ⭐STL的六大组件

STL大体分为六大组件,分别是:容器算法迭代器仿函数适配器(配接器)空间配置器

容器:

容器是用于存储数据的类模板。STL提供了多种不同类型的容器,每种容器都设计用于特定的使用场景,如vector、list、deque、set、map等,用来存放数据,从实现角度来看,STL容器是一种class template。

算法:

STL提供了一系列通用算法,这些算法可以作用于容器中的元素。这些算法大多是与容器类型无关的,包括排序、搜索、修改序列、数值运算等。从实现的角度来看,STL算法是一种function tempalte.

迭代器:扮演了容器与算法之间的胶合剂,共有五种类型,从实现角度来看,迭代器是一种将operator* , operator-> , operator++,operator–等指针相关操作予以重载的class template. 所有STL容器都附带有自己专属的迭代器,只有容器的设计者才知道如何遍历自己的元素。原生指针(native pointer)也是一种迭代器。

仿函数:行为类似函数,可作为算法的某种策略。从实现角度来看,仿函数是一种重载了operator()的class 或者class template

适配器(配接器):适配器是特殊类型的容器,它们提供了不同的接口或行为,基于其他容器实现。

空间配置器:负责空间的配置与管理。从实现角度看,配置器是一个实现了动态空间配置、空间管理、空间释放的class tempalte.

STL六大组件的交互关系,容器通过空间配置器取得数据存储空间,算法通过迭代器存储容器中的内容,仿函数可以协助算法完成不同的策略的变化,适配器可以修饰仿函数。

⭐如何学习STL

简单总结一下:学习STL的三个境界:能用,明理,能扩展

⭐STL的优势

  1. 高效性

    • STL的数据结构和算法经过精心设计和优化,以保证运行时的高效性。例如,std::vector在尾部添加元素通常是常数时间复杂度,而std::sort算法实现了高效的快速排序算法。
    • 这意味着,在执行时间和资源使用上,STL能够提供出色的性能,这对于需要高效处理大量数据的应用程序来说是非常重要的。
  2. 复用性

    • STL的组件是模板化的,这意味着它们可以用于不同的数据类型,而不需要为每种数据类型重新实现逻辑。
    • 这种设计减少了重复代码,使得开发者能够重用现有的数据结构和算法,加快开发进程并减少错误。
  3. 泛型编程

    • 通过模板,STL支持泛型编程,允许开发者编写独立于特定数据类型的代码。这增加了代码的通用性和灵活性。
    • 泛型编程还意味着,同一套代码可以适用于多种数据类型,从而提高了代码的复用性和可维护性。
  4. 大量的算法

    • STL提供了一系列的标准算法,如排序、搜索、变换等。这些算法可以直接应用于STL容器,极大地提高了开发效率。
    • 这些算法的存在减少了开发者需要手动实现这些常见操作的需要,从而可以专注于解决更具体的问题。

 

⭐STL的缺陷

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

____________________

⭐感谢你的阅读,希望本文能够对你有所帮助。如果你喜欢我的内容,记得点赞关注收藏我的博客,我会继续分享更多的内容。⭐

 

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

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

相关文章

2024年阿里云2核4G服务器优惠价格30元、165元和199元1年

阿里云2核4G服务器租用优惠价格,轻量2核4G服务器165元一年、u1服务器2核4G5M带宽199元一年、云服务器e实例30元3个月,活动链接 aliyunfuwuqi.com/go/aliyun 活动链接如下图: 阿里云2核4G服务器优惠价格 轻量应用服务器2核2G4M带宽、60GB高效…

使用PDFBox调整PDF每页格式

目录 一、内容没有图片 二、内容有图片 maven依赖&#xff0c;这里使用的是pdfbox的2.0.30版本 <dependency><groupId>org.apache.pdfbox</groupId><artifactId>pdfbox</artifactId><version>2.0.30</version></dependency>…

jvm提供的远程调试 简单使用

JVM自带远程调试功能 JVM远程调试&#xff0c;其实是两个虚拟机之间&#xff0c;通过socket通信&#xff0c;达到远程调试的目的&#xff1b; 前提 确保本地和远程的网络是开通的&#xff1b; 本地操作 远程操作 在启动命令参数中 把上面的内容复制进去

基于Java中的SSM框架实现考研指导平台系统项目【项目源码+论文说明】计算机毕业设计

基于Java中的SSM框架实现考研指导平台系统演示 摘要 应对考研的学生&#xff0c;为了更好的使校园考研有一个更好的环境好好的学习&#xff0c;建议一个好的校园网站&#xff0c;是非常有必要的。提供学生的学习提供一个交流的空间。帮助同学们在学习高数、学习设计、学习统计…

图论07-被包围的区域(Java)

7.被包围的区域 题目描述 给你一个 m x n 的矩阵 board &#xff0c;由若干字符 X 和 O &#xff0c;找到所有被 X 围绕的区域&#xff0c;并将这些区域里所有的 O 用 X 填充。 示例 1&#xff1a; 输入&#xff1a;board [["X","X","X",&qu…

css设置div的2个span一个在最左边,一个在最右边

界面&#xff1a; 代码&#xff1a; <html><style>.top span {display: block;position: absolute;margin: 0 20px; /* 添加边距以避免太靠近边缘 */ }.top span:nth-child(1) {left: 5px; /* 调整左侧位置 */ }.top span:nth-child(2) {right: 5px; /* 调整右侧位…

javaweb day21 day22 day23 day24

dql 基本查询 写法 条件查询 写法 聚合函数 写法 分组查询 写法 排序查询 写法 分页查询 写法 案例 写法

量子计算机

近日&#xff0c;在AWS re&#xff1a;Invent全球大会上&#xff0c;亚马逊官宣AWS三箭齐发量子计算组合拳&#xff1a;Braket、AWS量子计算中心和量子解决方案实验室。 随着亚马逊的强势入局&#xff0c;加上此前鼓吹量子霸权的谷歌、起步最早的IBM、暗自发力的微软&#xff…

信号处理--基于通用空间模态(CSP)的脑电通道选择

目录 理论 工具 方法实现 参考文献 理论 通用空间模式&#xff08;CSP&#xff09;是生物医学信号处理领域的一项流行技术&#xff0c;已广泛应用于各种应用&#xff0c;特别是在医疗保健行业。它是一种空间滤波技术&#xff0c;用于从多通道生物医学信号&#xff08;例如脑…

几个常用的控件(2)

目录 一、单选按钮Radiobutton和RadioButtonList 1、Radiobutton控件 &#xff08;1&#xff09;button控制方式 &#xff08;2&#xff09;Radiobutton控制方式 2、RadiobuttonList控件 二、列表框ListBox和下拉列表DropdownList 1、ListBox 2、DropdownList 三、面板…

C语言:数据在内存中的存储

目录 一、 整数在内存中的存储二、 大小端字节序和字节序判断1.什么是大小端2.为什么有大小端3.练习(1)练习1(2)练习2(3)练习3(4)练习4(5)练习5(6)练习6 三、 浮点数在内存中的存储1.练习2.浮点数的存储(1) 浮点数存的过程(2)浮点数取的过程 3.题目解析 一、 整数在内存中的存储…

GB4806.12 竹木材质食品接触餐具厨具检测机构

竹制餐具大多使用竹子作为材质&#xff0c;使用新鲜竹子炮制成型&#xff0c;成型后晒干进行装饰&#xff0c;制作工艺简单快捷&#xff0c;实用性很强&#xff0c;外形美观&#xff0c;实惠好用。很多老一辈人群十分喜欢使用各种竹木制餐具&#xff0c;韧性好&#xff0c;不易…

shell基础编程(一)

引言&#xff1a;之前的初识shell的内容简单的介绍了一下shell&#xff0c;帮助大家认识了一下shell 的组成&#xff0c;这篇文章就具体的讲解shell有关的知识。如果大家有编程基础的话。接下来几篇的文章读起来都会非常容易。没有的话也没有关系&#xff0c;我尽最大的可能讲的…

RabbitMQ是如何保证高可用的?

RabbitMQ可以通过多种方式来实现高可用&#xff0c;以确保在硬件故障或其他不可预测的情况下&#xff0c;消息队列系统仍然能够正常运行。RabbitMQ有三种模式&#xff1a;单机模式、普通集群模式、镜像集群模式。 其中单机模式一般用于demo搭建&#xff0c;不适合在生产环境中…

高项-案例分析练习(范围管理)

案例一 公司在2014年初承接了一个医疗信息系统项目&#xff0c;要求2014年底完成该项目研发任务并进行试运行&#xff0c;2015年负责项目全年的运行维护&#xff0c;运行稳定后甲方验收合格项目才能结束。由于张工具有多年的医疗系统开发管理经验&#xff0c;公司领导任命他为项…

工作需求,Vue实现登录

加油&#xff0c;新时代打工人&#xff01; vue 2.x Element UI <template><div class"body" :style"{background-image: url(${require(/assets/images/login.png)})}"><el-form :rules"rules" ref"loginForm" :mode…

目标控制器数字孪生系统的研究与设计

文章来源&#xff1a;铁路计算机应用,2023,32(10):36-41. 作者&#xff1a;许婧&#xff0c;杨硕&#xff0c;季志均 摘要&#xff1a;随着目标控制器&#xff08;OC&#xff0c;Object Controller&#xff09;系统在轨道交通领域的推广应用&#xff0c;其硬件投入较高、研发…

VMware 15 中 Ubuntu与windows 10共享文件夹设置

wmware 15.5.7中安装ubuntu 22.04 物理机为windows 10 1.选中ubuntu中想要共享的文件夹右击&#xff0c;点属性 2.在Local network share中勾选share this folder&#xff0c;第一次会提示你安装samba&#xff0c;安装即可 3.window10的资源管理器中使用 虚拟机计算机名即可…

API调试管理工具Postman下载及操作介绍

1.下载安装postman地址&#xff1a;https://www.getpostman.com/downloads/ 2.创建项目 3.创建请求API 然后点击save保存api 4.用一个变量保存主域名&#xff0c;方便后续操作 就类似下面的baseurl 5.创建新环境 6.添加变量&#xff08;如添加本地测试环境url——ba…

什么是单点登录?

单点登录&#xff08;Single Sign On&#xff0c;简称 SSO&#xff09;简单来说就是用户只需在一处登录&#xff0c;不用在其他多系统环境下重复登录。用户的一次登录就能得到其他所有系统的信任。 为什么需要单点登录 单点登录在大型网站应用频繁&#xff0c;比如阿里旗下有淘…