【C++】标准模板库 STL 简介


  •   🧑‍🎓个人主页:简 料

  •   🏆所属专栏:C++

  •   🏆个人社区:越努力越幸运社区

  •   🏆简       介:简料简料,简单有料~在校大学生一枚,专注C/C++/GO的干货分享,立志成为您的好帮手 ~


C/C++学习路线 (点击解锁)
❤️C语言
❤️初阶数据结构与算法
❤️C++
❤️高阶数据结构
❤️Linux系统编程与网络编程

文章目录

  • 🏆前言
  • 🧑‍🎓什么是STL
  • 🧑‍🎓STL的版本
  • 🧑‍🎓STL的六大组件
  • 🧑‍🎓STL的重要性
  • 🧑‍🎓如何学习STL
  • 🧑‍🎓STL的缺陷
  • 🏆写在最后


🏆前言

🌀 STL是C++标准库的一部分,它在C++程序中扮演着重要的角色。它使用模板(template)来实现各种数据结构,包括序列容器、关联容器、无序容器等,并提供相应的迭代器、算法、适配器、仿函数等部件。这些部件可以用来实现各种复杂的数据结构和算法,从而大大简化了程序员的编程工作。
🌀 在C++中,stl的位置非常核心,它几乎渗透在C++程序的角角落落里。无论是开发底层系统,还是开发上层应用,stl都扮演着不可或缺的角色。它不仅提供了高效的数据结构和算法,还提供了一种标准化的编程模式,使得程序具有良好的可读性、可维护性和可重用性。
🌀 总之,stl在C++中的位置非常重要,它是C++标准库的核心组成部分,为程序员提供了强大的工具和资源,帮助程序员编写高质量、高效率的程序。


本章将带你快速了解STL,接下来就来认识认识一下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的六大组件分别是:
  1. 容器(containers):如vector、list、deque、set、map等,用来存放数据。从实现的角度看,stl容器是一种类模板。
  2. 算法(algorithms):如sort、search、copy、erase等。从实现的角度看,stl算法是一种函数模板。
  3. 迭代器(iterators):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”。从实现的角度看,迭代器是一种将operator*、operator->、operator++、operator–等指针相关操作予以重载的类模板。
  4. 仿函数(functors):行为类似函数,可以作为算法的某种策略。仿函数是一种重载了operator()的类或类模板。
  5. 适配器(adapters):一种用来修饰容器、仿函数、迭代器接口的东西。
  6. 配置器(allocators):负责空间配置与管理。
  • 这六大组件可以彼此组合套用,以实现更复杂的功能。

在这里插入图片描述


🧑‍🎓STL的重要性

  • 在笔试中:会有几道算法题,这时候,使用C++的小伙伴就不得不使用STL来提高效率了~
  • 在面试中:面试官经常会问到关于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这样会生成多份代码,当然这是模板语法本身导致的。

🏆写在最后

💝本章主要是给大家介绍C++当中的标准模板库(STL),只要你用C++,那必然脱离不了STL的存在,他的重要性是毋庸置疑的。最后用上文的一段文字来结尾:网上有句话说:“不懂STL,不要说你会C++”。STLC++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。😊


❤️‍🔥后续将会继续输出有关C++的文章,你们的支持就是我写作的最大动力!

感谢阅读本小白的博客,错误的地方请严厉指出噢~

请添加图片描述

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

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

相关文章

JavaScript 的双问号 和 ?. 的含义和作用

1、?. (可选链运算符) ?. 表示:可选链操作符( ?. )允许读取位于连接对象链深处的属性的值,而不必明确验证链中的每 个引用是否有效。操作符的功能类似于 . 链式操作符,不同之处在于,在引用为空(null 或…

使用端口扫描工具解决开放端口威胁并增强安全性

从暴露网络漏洞到成为入侵者的通道,开放端口可能会带来多种风险向量,威胁到网络的机密性、完整性和可用性。因此,最佳做法是关闭打开的端口,为了应对开放端口带来的风险,网络管理员依靠端口扫描工具来识别、检查、分析…

远程网络监控(RMON)

远程网络监控是一个使 IT 团队能够获得远程网络可见性的过程,它涉及主动监控网络以帮助网络无缝运行,这些监控远程网络的系统提供对性能的实时洞察,及时检测问题并在影响最终用户之前解决问题。这样,远程网络虽然相距遥远&#xf…

用好语言模型:temperature、top-p等核心参数解析

编者按:我们如何才能更好地控制大模型的输出? 本文将介绍几个关键参数,帮助读者更好地理解和运用 temperature、top-p、top-k、frequency penalty 和 presence penalty 等常见参数,以优化语言模型的生成效果。 文章详细解释了这些参数的作用…

zlmediakit实现rtsp流服务器

本次实现是将内存中的H264数据经过zlmediakit实现为rtsp流。 我是用的是CAPI的方式,将zlmediakit作为一个sdk嵌入到自己的程序中而不是作为一个独立的进进程服务。 1.编译完成zkmedialit后会得到bin include lib三个文件夹如图 其中bin中的MediaServer是作为独立的…

Linux作业练习题-解答

作业1:调研数据中心物理机及虚拟机的操作系统版本、虚拟环境使用的 Hypervisor 类型、服务器硬件配置、资源使用情况(内存/ CPU /磁盘使用率,网络带宽, I / O 速率等),要求调研两个数…

自己实名绑定了几个微信号?赶紧来看看

我们都明白,微信的重要性无处不在,它与我们生活的方方面面紧密相连。如今,微信支付已成为我们日常生活中不可或缺的一部分。无论是购物、用餐,还是日常消费,微信支付都能轻松解决。如果你担心携带现金会有遗失的风险&a…

低代码时代,如何运用JVS低代码表单组件单选与多选组件提升业务效率?

在现代化的数字界面中,组件是不可或缺的一部分。无论是在问卷调查、投票,还是在购物车等场景中,单选和多选组件都扮演着重要角色。它们让用户能够在一系列选项中做出决定,从而提高交互的效率和用户体验。 JVS低代码表单组件中提供…

Apple Vision Pro 开发机申请

申请地址: (免费租用形式) Developer Kit - visionOS - Apple Developer 上海Apple Lab 互动申请: View - Meet with Apple Experts - Apple Developer (需要完善的产品才能去测试哦) 它是如何工作的 我们将借给你一个Apple Vision Pro开发…

想基于AI变现吗,这个Star有1.8K的开源项目分享给你

公众号「架构成长指南」,专注于生产实践、云原生、分布式系统、大数据技术分享。 前言 在如今AI爆发的时代,每个人都想借着AI这股风,进行变现,今天给大家分享一个开源项目,他可以让你基于AI的能力进行变现 项目介绍 …

Doris中的物化视图(十八)

物化视图就是包含了查询结果的数据库对象,可能是对远程数据的本地 copy,也可能是一个表或多表 join 后结果的行或列的子集,也可能是聚合后的结果。说白了,就是预先存储查询结果的一种数据库对象。 在 Doris 中的物化视图&#xf…

指针笔试题分享

今天给大家分享几道关于指针的好题&#xff0c;我觉得的只要是题&#xff0c;都是好题咯&#xff01;下面来看看我们今天的题吧&#xff01; 题目一&#xff1a; #define _CRT_SECURE_NO_WARNINGS 1 #include <stdio.h>int main() {int a[5] { 1, 2, 3, 4, 5 };int* p…

内网渗透之Linux权限提升大法

文章目录 内网渗透|Linux权限提升大法0x01 前言0x02 工具介绍1.traitor2.LinEnum3.linux-exploit-suggester.sh4.Linux Exploit Suggester 25.beroot 0X02提权手法1.环境变量提权2.利用suid提权3.定时任务提权3.1定时任务文件覆盖提权3.2定时任务tar命令通配符注入提权 4.sudo提…

SPSS信度分析

前言&#xff1a; 本专栏参考教材为《SPSS22.0从入门到精通》&#xff0c;由于软件版本原因&#xff0c;部分内容有所改变&#xff0c;为适应软件版本的变化&#xff0c;特此创作此专栏便于大家学习。本专栏使用软件为&#xff1a;SPSS25.0 本专栏所有的数据文件请点击此链接下…

【shell】脚本实现将开发机user1账户下的abc文件夹复制到user2~4账户下

1 主要内容 可以使用Shell脚本来实现将开发机&#xff08;Linux&#xff09;上user1账户下的abc文件夹复制到user2、user3和user4账户下。 #!/bin/bash# 数组赋值&#xff0c;目标用户列表 # target_users(user2 user3 user4) # 定义数组 target_users()# 生成user数字的数组…

h5小游戏-盖楼游戏

盖楼游戏 一个基于JavaScrtipt、Html5 的盖楼游戏 效果预览 点我下载源代码 Game Rule 游戏规则 以下为默认游戏规则&#xff0c;也可参照下节自定义游戏参数 每局游戏生命值为3&#xff0c;掉落一块楼层生命值减1&#xff0c;掉落3块后游戏结束&#xff0c;单局游戏无时间限…

如何在 Photoshop 中删除颜色

如何在 Photoshop 中删除某种颜色的简单方法 如何在 Photoshop 中删除颜色 步骤1 有很多方法可以在 Photoshop 中删除颜色。作为一般概述&#xff0c;我们希望进行选择&#xff08;在本例中为我们的颜色&#xff09;&#xff0c;然后操作该选择&#xff08;通常删除或屏蔽内容…

Ubuntu开机显示recovering journal,进入emergency mode

在一次正常的shutdown -r now之后&#xff0c;服务器启动不起来了&#xff0c;登录界面显示recovering journal&#xff0c;主要报错信息如下所示&#xff1a; /dev/sda2:recovering journal /dev/sda2:Clearn... You are in emergency mode. After logging in, type journalc…

git 对已有的项目代码建立github仓库

首先在项目根路径下使用以下命令初始化git配置文件&#xff1b; git init关联github仓库地址&#xff0c;我这里使用的是SSH连接方式&#xff1b; git remote add origin gitgithub.com:xxxxx.git关联main分支&#xff0c;其中current_branch代表着你需要push的分支&#xff…

Ubuntu 22.04安装vscode

要在Ubuntu 22.04安装vscode&#xff0c;请完成这些步骤。 首先apt命令更新软件包索引并安装导入微软GPG密钥的依赖软件。 更新&#xff0c;近期内执行过可忽略 sudo apt update安装工具包 sudo apt install software-properties-common apt-transport-https curl当导入GPG后…