C++基础(十一):STL简介

       从今天开始,我们正式步入STL的学习,STL(标准模板库,Standard Template Library)是C++标准库的重要组成部分,提供了一系列通用的类和函数模板,包括容器、算法、迭代器等。它的设计极大地提高了代码的可重用性和效率,使得程序员能够用简单、清晰的方式处理复杂的数据结构和算法。可见,它的重要性不言而喻。

目录

一、什么是STL

二、STL的版本

三、STL的六大组件

四. STL的重要性

五. 如何学习STL

六、STL的缺陷


一、什么是STL

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

二、STL的版本

科普:  Linux是开源的操作系统,Windows、mac、os都是闭源的商业操作系统,mysql是开源的。

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

三、STL的六大组件

四. STL的重要性

       STL在笔试和面试中非常常见,我们要学会使用STL的使用。

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

五. 如何学习STL

学习STL的三个境界:

  1. 能用:熟练使用。
  2. 明理:明白底层的原理。
  3. 能扩展(比较难,不需要达到)。

六、STL的缺陷

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

       至此,这一讲内容介绍完毕,内容简单,初步了解STL, 星光不问赶路人,加油吧,感谢阅读,如果对此专栏感兴趣,点赞加关注! 

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

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

相关文章

[leetcode hot 150]第一百三十题,被围绕的区域

题目: 给你一个 m x n 的矩阵 board ,由若干字符 X 和 O 组成,捕获 所有 被围绕的区域: 连接:一个单元格与水平或垂直方向上相邻的单元格连接。区域:连接所有 0 的单元格来形成一个区域。围绕&#xff1a…

linux,docker,k8s常见命令

Linux 日志被删除查询日志 找到进程jps cd/proc/{pid}/fd su admin ls -lh|grep 文件名 在日期前的为id 然后tail -f id 后台运行 nohup & 删除文件 rm -f /opt/kibana-7.6.0-linux-x86_64.tar.gz 删除文件夹 rm -rf /opt/kibana-7.6.0-linux-x86_64 复制文件…

C++第一弹 -- C++基础语法上(命名空间 输入输出 缺省参数 函数重载 引用)

目录 前言一. C关键字(C98)二. 命名空间1.命名空间的定义2.命名空间的使用3.其它部分 三. C输入&输出四. 缺省参数1. 缺省参数的概念2.缺省参数的分类 五. 函数重载1.函数重载的概念2. 为什么C支持函数重载, 而C语言不支持重载呢? 六. 引用1.引用的概念2.引用的特性3.常引…

通过AIS实现船舶追踪与照射

前些天突然接到个紧急的项目:某处需要实现对夜航船只进行追踪并用激光灯照射以保障夜航安全。这个项目紧急到什么程度呢?!现场激光灯都安装好了,还有三个星期就要验收了,但上家没搞定就甩给我们了:( 从技术上看&#…

mysql5.6写定时备份脚本

文章目录 设置脚本创建备份脚本配置执行权限配置定时任务打开crontab编辑器配置定时任务和执行脚本 查看路径下备份出来的数据内容20240706130701_test.sql文件内容 设置脚本 创建备份脚本 #!/bin/bash# 定义数据库连接参数 DB_USER"root" DB_PASSWORD"root&q…

Java应用系统设计与实现--学生信息管理系统(附解决方案源码)

一、实验目的及要求 1.1实验目的 掌握Java GUI编程技术,了解Swing框架的使用。 掌握MySQL数据库的基本操作,了解如何在Java中连接和操作数据库。 掌握用户权限管理的基本概念和实现方法。 提升综合运用所学知识设计和实现一个完整应用系统的能力…

windows机器免密登录linux主机

1. 正常连接需要输入密码 ssh root1.1.1.1 2. 在Windows上生成SSH密钥对(如果你还没有的话): ssh-keygen 3. scp将id_rsa.pub传输到对应的主机 4.对应机器上查看 5.从windows上免密登录

ESP32 蓝牙网关实践:BLE 设备数据采集与 MQTT 云平台发布(附代码示例)

摘要: 本文详细介绍了如何使用 ESP32 构建强大的蓝牙网关,实现蓝牙设备与 Wi-Fi/互联网之间的无缝连接和数据桥接。文章涵盖了连接和桥接功能、数据处理和分析能力,并提供了详细的代码示例和 Mermaid 生成的图表,助您轻松构建自己的蓝牙网关解…

树(相关知识点)

目录 结点的度:某一个结点所含有字数的个数 叶节点:最后一个结点 非终端节点:不是叶结点 兄弟结点:亲兄弟结点 树的度:最大节点的度 层次:根为第一层,根的子结点为第二层,以此类推 森林&am…

Spring Boot与Okta的集成

Spring Boot与Okta的集成 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们将探讨如何在Spring Boot应用中集成Okta,实现身份认证和授权的功能…

Sass 和 SCSS

Sass 和 SCSS 是 Sass (Syntactically Awesome Stylesheets) 的两种语法。它们都被用于编写更加结构化和易于维护的 CSS。以下是它们在语法和特性上的主要对比: 1. 语法格式 Sass (缩进语法) 没有花括号 {} 和分号 ;。使用缩进来表示嵌套和层次关系。 navulmarg…

微软拼音输入法不显示选字框问题

问题展示:不显示选字框 解决方式 打开兼容性即可(估计是升级带来的bug)

探索参数化配置与系统性能的平衡点

在现代软件开发中,参数化配置已成为提高系统可扩展性和灵活性的关键方法之一。通过参数化配置,开发人员可以在不修改代码的情况下轻松调整系统行为,以适应不同的运行环境和需求。然而,尽管参数化配置带来了显著的好处,…

Android使用http加载自建服务器静态网页

最终效果如下图,成功加载了电脑端的静态网页内容,这是一个xml文件。 电脑端搭建http服务器 使用“Apache Http Server”,下载地址是:https://httpd.apache.org/download.cgi。具体操作步骤,参考:Apache …

深度学习与CV入门

文章目录 前言历史 前言 历史 tensorflow可以安装Tensorboard第三方库用于展示效果 TensorFlow工作流程:p6-4:20 使用tf.data加载数据。使用tf.data实例化读取训练数据和测试数据模型的建立与调试:使用动态图模式Eager Execution和著名的神经网络高层API框架Ker…

关于忠诚:忠于自己的良知、理想、信念

关于忠诚: 当我们面对公司、上司、爱人、恋人、合作伙伴还是某件事,会纠结离开还是留下,这里我们要深知忠诚的定义,我们不是忠诚于某个人、某件事、或者某个机构,而是忠诚于自己的良知,忠诚于自己的理想和…

1.1 常用文件管理命令

文章目录 前言正式学习文件系统常用的指令总结 前言 现在自己想做一个简单的编译器,但是安装环境就感觉非常难受,反正 linux 也是必须要学的,虽然,非常紧迫,但是很多事情着急也没有用,所以,现在…

ctfshow-web入门-文件上传(web151-web160)

目录 1、web151 2、web152 3、web153 4、web154 5、web155 6、web156 7、web157 8、web158 9、web159 10、web160 1、web151 试了下前端只能传 png 后缀的 将一句话木马改成 png 后缀,上传后用 burpsuite 抓包 绕过前端检测后,改回 php 后缀&am…

【AI应用探讨】—线性回归应用场景

目录 1. 经济学 2. 市场营销 3. 医学研究 4. 教育评估 5. 人力资源管理 6. 预测与趋势分析 7. 特征选择与异常值检测 总结 1. 经济学 GDP与失业率关系分析:通过线性回归模型,经济学家可以分析GDP增长与失业率之间的关系,了解经济增长…

Typescript中object和Object的区别

object: object 类型表示非原始对象,也就是除了 number, string, boolean, symbol, null 或 undefined 之外的任何类型。object 类型是所有对象类型的父类型,也就是说,任何对象类型都可以赋值给 object 类型,但是 obj…