[C++]——STL简介

带你了解c++的STL

  • 前言:
  • 一、什么是STL?
  • 二、STL有什么版本?
  • 三、STL的组件有哪些?
  • 四、如何学习STL?
  • 五、总结

前言:

我写这个博客,是为了在学习过程中能够更加有条理,更加全面,更加清晰的学习STL。学习就要带着问题去学,影响才会深刻。c++98是c++标准的第一个版本,以模板的方式,重写c++标准库,就引入了了STL。(STL是标准模板库)

一、什么是STL?

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

二、STL有什么版本?

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

三、STL的组件有哪些?

STL共用六大组件:
在这里插入图片描述

  1. 容器:各种数据结构,如vector、list、deque、set、map等,用来存放数据。
  2. 算法:各种常用的算法,如sort、find、copy、for_each等
  3. 迭代器:扮演了容器与算法之间的胶合剂。
  4. 仿函数:行为类似函数,可作为算法的某种策略。
  5. 适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
  6. 空间配置器:负责空间的配置与管理。

四、如何学习STL?

网上有句话说:“不懂 STL,不要说你会 C++”。STL 是 C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快速开发。
学习c++一般分为三个层次:
第一层:了解、熟练使用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.hqwc.cn/news/284817.html

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

相关文章

Pipelined-ADC设计一:序言

现在是2023年12月18日,准备开新帖,设计一个 流水线型 模数转换器( Pipelined-ADC )。记录帖,后续会放在咸鱼。同步记录,谨防盗用。 初定指标:12位50Mhz,采用2.5bit每级结构&#xff…

教育机构小程序管理系统的全方位优化

随着互联网的快速发展,线上教育也日益受到人们的关注和欢迎。为了满足广大学生和家长的需求,教育机构纷纷开发出自己的小程序管理系统。本文将详细介绍如何使用乔拓云平台,一键开发出自己的教育机构小程序管理系统。 1.进入乔拓云后台 首先&…

C# 使用FluentHttpClient请求WebApi

写在前面 FluentHttpClient 是一个REST API 异步调用 HTTP 客户端,调用过程非常便捷,采用流式编程,可以将所有请求所需的参数一次性发送,并直接获取序列化后的结果。 老规矩从NuGet上安装该类库: 这边一定要认准是 P…

检测车牌的SIFT特征并匹配

# 代码5-14 检测车牌的SIFT特征并匹配 import cv2img1 cv2.imread(../data/plate.jpg) img2 cv2.imread(../data/car.jpg)sift cv2.SIFT_create() # 利用sift.detectAndCompute()函数找到特征点,计算描述符; kp1, des1 sift.detectAndCompute(img1, …

Git提交前的必备神器——自动清除调试语句脚本

说在前面 不知道大家有没有遇到这样一种情况,平时在写代码调试时有时候会使用到debugger,可能大部分时间在提交代码前会记得把debugger先删除,但可能也会存在将debugger提交上去的情况,那我们该怎么防止出现这种情况呢&#xff1f…

C语言—每日选择题—Day53

指针相关博客 打响指针的第一枪&#xff1a;指针家族-CSDN博客 深入理解&#xff1a;指针变量的解引用 与 加法运算-CSDN博客 第一题 1. 有以下程序&#xff0c;输出的结果为&#xff08;&#xff09; #include <stdio.h> int main() {char a H;a (a > A &&…

【03】GeoScene创建海图或者电子航道图数据

1 配置Nautical属性 1.1 管理长名称 长名称&#xff08;LNAM&#xff09;是一个必要的对象标识符&#xff0c;是生产机构&#xff08;AGEN&#xff09;、要素识别号码&#xff08;FIDN&#xff09;和要素识别子项&#xff08;FIDS&#xff09;组件的串联。这三个子组件用于数…

MidJourney笔记(8)-ask和blend命令

经过前面的课程介绍,我相信大家对MidJourney有一定的认识,接下来就给大家介绍一下MidJourney的常用命令。 /ask 获取问题答案。 我一开始以为是随便问题都可以问,最后发现只能回答MidJourney相关的问题。 我们先试试一些日常生活问题: 今天天气如何? 以为它不会识别中文,…

蓝桥杯time模块常用操作

#导入time模块import time #获取时间戳 start_time time.time () print ( "start_time ", start_time) time .sleep ( 3) end_time time.time () print ( "end_time ", end_time)#计算运行时间 print("运行时间 { :.0f } ".format(end_time …

计算机毕业设计 基于SpringBoot的高校毕业与学位资格审核系统的设计与实现 Java实战项目 附源码+文档+视频讲解

博主介绍&#xff1a;✌从事软件开发10年之余&#xff0c;专注于Java技术领域、Python人工智能及数据挖掘、小程序项目开发和Android项目开发等。CSDN、掘金、华为云、InfoQ、阿里云等平台优质作者✌ &#x1f345;文末获取源码联系&#x1f345; &#x1f447;&#x1f3fb; 精…

Vue中英文翻译小结

背景&#xff1a;时局艰难&#xff0c;后端开发被强制写了vue&#xff0c;这不有个需求是中英文翻译&#xff0c;特此记录下&#xff0c;该怎么个翻译法子。 先引入全局的路由国际化文件&#xff0c;zh.js 和 en.js 1.关于插值表达Button里面 {{ $t(reinsop.common.back) }} …

如何用Python向图像中加入噪声

我们在做机器视觉项目的过程中&#xff0c;有的时候需要向图像中加入噪声。Pytorch本身不支持类似的功能&#xff0c;如果自己写的话&#xff0c;不但麻烦&#xff0c;而且容易出错。好在skimage支持这个功能。代码如下&#xff1a; import skimage import matplotlib.pyplot …