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

news2024/11/23 11:39:22

  •   🧑‍🎓个人主页:简 料

  •   🏆所属专栏: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++的文章,你们的支持就是我写作的最大动力!

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

请添加图片描述

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

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

相关文章

7 进制数字转换

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台备战技术面试?力扣提供海量技术面试资源,帮助你高效提升编程技能,轻松拿下世界 IT 名企 Dream Offer。https://leetcode.cn/problems/base-7/description/ 给定一个整…

人工智能:生活的新魔术师

目录 ​编辑 人工智能对我们的生活影响有多大 人工智能的应用领域 一、机器学习与深度学习 二、计算机视觉 三、自然语言处理 四、机器人技术 五、智能推荐系统 六、智能城市和智能家居 ​编辑 自己对人工智能的应用 自己的人工智能看法:以ChatGPT为例 …

薄膜和涂层中应力产生和松弛的机理

引言 由于薄膜和涂层在微电子学、光学、生物技术、微机械、航空航天和工具工业等领域的广泛应用,薄膜和涂层的应力诱发失效现象是一个非常重要的问题。薄膜开裂和剥落可能是由拉伸应力引起的,而屈曲和分层是由压缩应力的松弛引起的。应力产生和松弛的竞…

【用unity实现100个游戏之16】Unity程序化生成随机2D地牢游戏1(附项目源码)

文章目录 先看看最终效果前言随机游走算法使用随机游走算法添加地板瓦片1. 新增TilemapVisualizer,用于可视化地图2. 瓦片素材 不运行执行程序化生成地牢方法1. 先简单重构代码2. 新增Editor脚本RandomDungeonGeneratorEditor 将参数保存到可编辑脚本对象&#xff0…

微信搜一搜有什么意想不到的功能?

其实我们每天都在用的微信,还有很多你意想不到的功能,像是一些每天我们都会看到,但是却不常使用的功能。 “搜一搜”这个功能,其实它已经上线很久了,它不仅是一个搜索入口,还是非常强大的聚合性服务。 生僻…

Navicat DML 操作

在表格种插入 列信息 -- 修改数据 update 表名 set 列名 值1, 列名值2,[where 条件]; -- 注意:如果update语句没有加where 表里对应行的全部信息都会被改; -- 删除数据 delecte from 表名 [where 条件]; 未删除前: 执行删除后为: DQL - 条…

OSCP系列靶场-Esay-DC-1

目录 总结 准备工作 信息收集-端口扫描 目标开放端口收集 目标端口对应服务探测 信息收集-端口测试 22-SSH端口的信息收集 22-SSH端口版本信息与MSF利用(pass) 22-SSH手动登录尝试(失败) 22-SSH弱口令爆破(爆破着玩) 80-HTTP端口的信息收集 信息收集-网站指纹 漏洞…

pikachu靶场-暴力破解攻略

pikachu暴力破解 基于表单的暴力破解 抓包发送到intruder 添加两个变量 下图攻击模式需要选择cluster bomb 用户名处添加几个常见的用户名 密码处则添加密码字典 如图可见有一条密码已经爆出 登录成功 验证码绕过(on server) 输入验证码后提交 抓包 然后发送到repeater先…

【前端学java】java中的日期操作(12)

往期回顾: 【前端学java】JAVA开发的依赖安装与环境配置 (0)【前端学 java】java的基础语法(1)【前端学java】JAVA中的packge与import(2)【前端学java】面向对象编程基础-类的使用 &#xff08…

蓝桥杯每日一题2023.11.20

题目描述 “蓝桥杯”练习系统 (lanqiao.cn) 题目分析 方法一&#xff1a;暴力枚举&#xff0c;如果说数字不在正确的位置上也就意味着这个数必须要改变&#xff0c;进行改变记录即可 #include<bits/stdc.h> using namespace std; const int N 2e5 10; int n, a[N], …

江苏专转本考试时,遇到不会的题目该怎么办呢??

有很多同学最近在问&#xff0c;如果专转本考试时遇到 不会的题目怎么办&#xff1f;&#xff1f; 考场上题目太陌生没见过会不会凉凉 以学姐自身经验分享&#xff0c;其实未必会凉凉&#xff0c;当时我在16届计算机考试时&#xff0c;遇上了填空题新题型&#xff0c;当时在考…

微服务学习|Gateway网关:网关作用、快速入门、路由断言工厂、路由过滤器配置、全局过滤器、过滤器执行顺序、跨域问题处理

为什么需要网关 网关功能: 1.身份认证和权限校验 2.服务路由、负载均衡 3.请求限流 网关的技术实现 在SpringCloud中网关的实现包括两种:gateway、zuul Zuul是基于Servlet的实现&#xff0c;属于阻塞式编程。而SprinaCloudGateway则是基于Spring5中提供的WebFlux&#xf…

three.js实现管道漫游

先看效果&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"><pre s…

【LeetCode】104. 二叉树的最大深度

104. 二叉树的最大深度 难度&#xff1a;简单 题目 给定一个二叉树 root &#xff0c;返回其最大深度。 二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。 示例 1&#xff1a; 输入&#xff1a;root [3,9,20,null,null,15,7] 输出&#xff1a;3示例 …

Java(三)(static,代码块,单例设计模式,继承)

目录 static 有无static修饰的成员变量 有无static修饰的成员方法 static的注意事项 代码块 静态代码块 实例代码块 单例设计模式 饿汉式单例写法 懒汉式单例写法 继承 基本概念 注意事项 权限修饰符 单继承 object 方法重写 子类方法中访问其他成员(成员变量…

Maven工程继承关系,多个模块要使用同一个框架,它们应该是同一个版本,项目中使用的框架版本需要统一管理。

1、父工程pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/PO…

Android studio run 手机或者模拟器安装失败,但是生成了debug.apk

错误信息如下&#xff1a;Error Installation did not succeed. The application could not be installed&#xff1a;List of apks 出现中文乱码&#xff1b; 我首先尝试了打包&#xff0c;能正常安装&#xff0c;再次尝试了debug的安装包&#xff0c;也正常安装&#xff1…

C#基础教程 多线程编程入门 Thread/Task/async/await

private void button1_Click(object sender, EventArgs e){//控制主线程(单线程操作)MessageBox.Show("开始做菜", "友情提示");Thread.Sleep(3000);//主线程休眠MessageBox.Show("素菜做好了","友情提示");Thread.Sleep(5000);Messag…

linux上安装qt creator

linux上安装Qt Creator 1 Qt Creator 的下载 下载地址为&#xff1a;http://download.qt.io/archive/qt/ 根据自己的需求选择Qt Creator版本&#xff0c;这里我下载的是5.12.9&#xff0c;如下图所示&#xff1a; 在ubuntu上可以使用wget命令下载安装包&#xff1a; wget h…

el-table实现表格内嵌套表格

文章目录 一、效果图二、使用场景三、所用组件元素&#xff08;Elementui&#xff09;四、代码部分 一、效果图 二、使用场景 &#x1f6c0;el-form 表单内嵌套el-table表格 &#x1f6c0;el-table 表格内又嵌套el-table表格 三、所用组件元素&#xff08;Elementui&#xff…