C++奇迹之旅:STL初步学习

news2024/11/17 19:51:47

请添加图片描述

文章目录

  • 📝什么是STL
  • 🌠 STL的版本
    • 🌉STL的六大组件
  • 🌠STL的重要性
  • 🌉如何学习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. 在笔试中
  • JZ78 把二叉树打印成多行
  • 重建二叉树
  • 用两个栈实现队列
    1. 在面试中
      在这里插入图片描述

在这里插入图片描述

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

🌉如何学习STL

STL组件与平台无关,与应用无关,与数据类型无关,几乎在任何应用程序开发中都可以使用:它不仅可以大大减少编程工作量,提高编程效率,而且也减少了程出错的机会:它不仅可以提高代码的可读性、清晰性,还可提高应用程序的健壮性、性能和可移植性。因此我们要尽可能地使用它们。按照所用的hash不过,千万不要“为了使用STL而使用STL”。比如,如果你仅需要对一两个字节的数据进行简单的移位操作那就没有必要“劳驾”bitset:如果可以使 静态数组,也就不需要“劳驾”vector;如果你仅是比较两个C字符串,直接调用C库函数strmp好了,没有必要把它们转换成string对象,然后再调用重载的运算符或者string:compareo来比较,侯捷的高质量程序指南提到。

容易使你迷失的是STL中几乎每一个部分都充斥着Templat、选代器和重载的运算符,如果你对它们一无所知,在STL的海洋里就会寸步难行。虽然STL有许多优点,可是学习和掌握STL 并不是一件轻松的事儿。你首先必增加、删除须了解隐藏在STL 组件背后的设计原理和技术,然后才能运用自如,出了问题也容易定位。如果你仅是停留在“使用”这个层次上,那么当出现问题而问题又并非位
于表面时,你可能就会“找不着北”,甚至开始埋怨STL一点也不好用,其实问题往往出在自己这里。
在这里插入图片描述
简单总结一下:学习STL的三个境界:能用,明理,能扩展 。

🌠STL的缺陷

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

🚩总结

请添加图片描述

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

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

相关文章

ubuntu安装LVGL/lv_img_conv并在thinkphp中进行调用生成bin文件

项目需求:需要处理图片成为bin文件,并以二进制的方式传给蓝牙设备,当前仅介绍如何安装,对lvgl功能和简介不做过多描述 项目库地址:https://github.com/lvgl/lv_img_conv 安装过程比较简单 一,确保node.j…

ubuntu20中ros与anaconda的python版本冲突问题

系统环境 原本系统是ubuntu20 noetic,python都在/usr/bin中,一共是两个版本的python,一个是python3.8,另一个是python2.7。 问题发现 当安装anaconda后,并且将anaconda的bin目录加入到系统环境中时候,…

Unity 性能优化之动态批处理(四)

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激! 文章目录 前言一、动态合批是什么?二、使用动态批处理1.打开动态合批2.满足条件 三、检查动态合批是否成功五、动态合批弊端总结 前言 动态批处理是常用优…

《QT实用小工具·五十四》果冻弹出效果的动画按钮

1、概述 源码放在文章末尾 该项目实现动画按钮,鼠标放在按钮上可以弹性拉出的三个按钮,使用贝塞尔曲线实现,项目demo显示如下所示: 项目部分代码如下所示: #ifndef WATERCIRCLEBUTTON_H #define WATERCIRCLEBUTTON…

TOOL使用fiddler导出的har文件导入到postman测试接口

在fiddler操作 export → File → Export Sessions → alls-->http arch v1.1 导出的har文件直接拖入到浏览器的调试工具中, 然后复制为curl,导入到postman中即可!

菜鸡学习netty源码(四)—— EventLoop

1.概述 我们前面进行过分析,channel为netty网络操作的抽象类,EventLoop负责处理注册到其上的Channel处理的I/O事件;EventLoopGroup是一个EventLoop的分组,它可以获取到一个或者多个的EventLoop对象。 2.类关系图 NioEventLoopGroup的类继承图,蓝色部分为对应的java类,绿…

IoTDB 入门教程 基础篇⑦——数据库管理工具 | DBeaver 连接 IoTDB

文章目录 一、前文二、下载iotdb-jdbc三、安装DBeaver3.1 DBeaver 下载3.2 DBeaver 安装 四、安装驱动五、连接数据库六、参考 一、前文 IoTDB入门教程——导读 二、下载iotdb-jdbc 下载地址org/apache/iotdb/iotdb-jdbc:https://maven.proxy.ustclug.org/maven2/o…

AI大模型探索之路-训练篇13:大语言模型Transformer库-Evaluate组件实践

系列篇章💥 AI大模型探索之路-训练篇1:大语言模型微调基础认知 AI大模型探索之路-训练篇2:大语言模型预训练基础认知 AI大模型探索之路-训练篇3:大语言模型全景解读 AI大模型探索之路-训练篇4:大语言模型训练数据集概…

2021-11-10 51蛋骗鸡单数码0-9按键条件速度逢9蜂鸣

缘由用Proteus设计单片机控制1只数码管&#xff0c;循环显示0~9。循环显示间隔可手动按钮调整。每当到9时&#xff0c;发出声音提示-编程语言-CSDN问答 #include "REG52.h" #include<intrins.h> sbit K1 P3^0; sbit K2 P3^1; sbit K3 P3^2; sbit K4 P3^3;…

论文笔记:(Security 22) 关于“二进制函数相似性检测”的调研

个人博客链接 注&#xff1a;部分内容参考自GPT生成的内容 [Security 22] 关于”二进制函数相似性检测“的调研&#xff08;个人阅读笔记&#xff09; 论文&#xff1a;《How Machine Learning Is Solving the Binary Function Similarity Problem》&#xff08;Usenix Securi…

【面试经典 150 | 数组】文本左右对齐

文章目录 写在前面Tag题目来源解题思路方法一&#xff1a;模拟 写在最后 写在前面 本专栏专注于分析与讲解【面试经典150】算法&#xff0c;两到三天更新一篇文章&#xff0c;欢迎催更…… 专栏内容以分析题目为主&#xff0c;并附带一些对于本题涉及到的数据结构等内容进行回顾…

Git系列:config 配置

&#x1f49d;&#x1f49d;&#x1f49d;欢迎莅临我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

自定义数据上的YOLOv9分割训练

原文地址&#xff1a;yolov9-segmentation-training-on-custom-data 2024 年 4 月 16 日 在飞速发展的计算机视觉领域&#xff0c;物体分割在从图像中提取有意义的信息方面起着举足轻重的作用。在众多分割算法中&#xff0c;YOLOv9 是一种稳健且适应性强的解决方案&#xff0…

车载电子电器架构 —— 关于bus off汇总

车载电子电器架构 —— 关于bus off汇总 我是穿拖鞋的汉子,魔都中坚持长期主义的汽车电子工程师。 老规矩,分享一段喜欢的文字,避免自己成为高知识低文化的工程师: 屏蔽力是信息过载时代一个人的特殊竞争力,任何消耗你的人和事,多看一眼都是你的不对。非必要不费力证明…

【C++题解】1660. 今天要上课吗

问题&#xff1a;1660. 今天要上课吗 类型&#xff1a;分支结构 题目描述&#xff1a; 暑假来了&#xff0c;晶晶报了自己心仪已久的游泳课&#xff0c;非常开心&#xff0c;老师告诉晶晶每周周一、周三、周五、周六四天都要上课的&#xff0c;晶晶担心自己会忘记&#xff0c…

AI-数学-高中52-离散型随机变量概念及其分布列、两点分布

原作者视频&#xff1a;【随机变量】【一数辞典】2离散型随机变量及其分布列_哔哩哔哩_bilibili 离散型随机变量分布列&#xff1a;X表示离散型随机变量可能在取值&#xff0c;P:对应分布在概率&#xff0c;P括号里X1表示事件的名称。 示例&#xff1a;

近似消息传递算法(AMP)单测量模型(SMV)

1、算法解决问题 很多人致力于解决SLM模型的求逆问题&#xff0c;即知道观测值和测量矩阵&#xff08;字典之类的&#xff09;&#xff0c;要求未知变量的值。SLM又叫做标准线性模型&#xff0c;后续又在此基础上进行升级变为广义线性模型。即SLM是yAxe&#xff0c;这里是线性…

循环神经网络完整实现(Pytorch 13)

一 循环神经网络的从零开始实现 从头开始基于循环神经网络实现字符级语言模型。 %matplotlib inline import math import torch from torch import nn from torch.nn import functional as F from d2l import torch as d2lbatch_size, num_steps 32, 35 train_iter, vocab …

【ARM Cortex-M3指南】3:Cortex-M3基础

文章目录 三、Cortex-M3基础3.1 寄存器3.1.1 通用目的寄存器 R0~R73.1.2 通用目的寄存器 R8~R123.1.3 栈指针 R133.1.4 链接寄存器 R143.1.5 程序计数器 R15 3.2 特殊寄存器3.2.1 程序状态寄存器3.2.2 PRIMASK、FAULTMASK和BASEPRI寄存器3.2.3 控制寄存器 3.3 操作模式3.4 异常…

缓冲流,BufferReader,BufferWriter,案例

IO流的体系 字节缓冲流的作用 提高字节流读取数据的性能 *原理&#xff1a;字节缓冲输入流自带了8Kb的缓冲池&#xff0c;字节缓冲输出流也自带了8kb的缓冲池 构造器说明public BufferedInputStream(InputStream is)把低级的字节输入流包装成一个高级的缓冲字节输入流&#…