【C++】STL简介

news2024/11/17 2:27:21

在C++领域我们正式进入到STL的学习,本期我们简单的介绍一下STL

目录

一、什么是STL

二、STL的版本

2.1 原始版本

2.2 P. J. 版本

2.3 RW版本

2.4 SGI版本

三、STL的六大组件

四、STL的缺陷


一、什么是STL

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

程序员无需了解STL的原理,便可以享受数据结构和算法领域中的这一革新结果,因此我们不必再自己闭门造车,大大加快了开发的效率。

二、STL的版本

2.1 原始版本

Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任意 运用、拷贝、修改、传播、商业使用这些代码,无需付费。唯一的条件就是也需要向原始版本一样做开源使 用。 HP 版本--所有STL实现版本的始祖。

2.2 P. J. 版本

由P. J. Plauger开发,继承自HP版本,被Windows Visual C++采用,不能公开或修改,缺陷:可读性比较低, 符号命名比较怪异。

2.3 RW版本

由Rouge Wage公司开发,继承自HP版本,被C+ + Builder 采用,不能公开或修改,可读性一般。

2.4 SGI版本

由Silicon Graphics Computer Systems,Inc公司开发,继承自HP版 本。被GCC(Linux)采用,可移植性好, 可公开、修改甚至贩卖,从命名风格和编程 风格上看,阅读性非常高。我们后面学习STL要阅读部分源代码, 主要参考的就是这个版本。

三、STL的六大组件

STL提供六大组件,它们之间可以彼此套用,如下图所示

容器(containers):用于存放数据

算法(algorithms):包含各种常用算法

迭代器(iterators):处于容器和算法中间,算法通过迭代器获取到容器的数据,并对数据进行操作

仿函数(functors):行为类似函数,协助算法完成不同策略变化

适配器(adapters):一种用来修饰容器、仿函数或者迭代器接口的东西

配置器(allocators):负责底层动态空间配置、空间管理和空间释放

在这里我们只需要了解一下,后期我们会深入分析

四、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/504638.html

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

相关文章

保姆级教程!教你打造自己的AI孙燕姿;全程使用AI工具设计一款桌游;搭建基于LLM的客服系统的实践 | ShowMeAI日报

👀日报&周刊合集 | 🎡生产力工具与行业应用大全 | 🧡 点赞关注评论拜托啦! 🤖 『大模型技术与应用思考导图』跟着大佬做判断 王咏刚,创新工场CTO,技术撰稿人,有数个知名出版作品…

Nat. Commun. | 无需参数的几何深度学习,可准确预测蛋白质结合界面

编译 | 曾全晨 审稿 | 王建民 今天为大家介绍的是来自Matteo Dal Peraro团队的一篇关于预测蛋白质结合的论文。蛋白质是生命的重要分子组成部分,由于其特定的分子相互作用而负责大多数生物功能。然而,预测它们的结合界面仍然是一个挑战。作者提出了一种几…

【JS】1676- 重学 JavaScript API - Page Visibility API

在前端开发中,我们经常需要根据页面的可见性来控制资源的使用和提高页面的性能和响应速度。而 JavaScript 中的 Page Visibility API[1] 就提供了一种「检测页面是否可见」的方法。 本文将介绍 Page Visibility API 的概念、使用方法、兼容性和实际应用案例。 什么是…

【负载均衡式的在线oj(1.compile_runner_server模块)】

🎉实战项目:负载均衡式在线OJ 博主主页:桑榆非晚ᴷ 博主能力有限,如果有出错的地方希望大家不吝赐教 给自己打气:成功没有快车道,幸福没有高速路。所有的成功,都来自不倦地努力和奔跑&#xf…

并发编程07:CAS

文章目录 7.1 原子类7.2 没有CAS之前7.3 使用CAS之后7.4 是什么?7.5 CAS底层原理?谈谈对Unsafe类的理解?7.5.1 Unsafe7.5.2 源码分析7.5.3 底层汇编 7.6 原子引用7.7 CAS与自旋锁,借鉴CAS思想7.7.1 是什么?7.7.2 自己实…

K8S管理系统项目实战[API开发]-1

前端: Vueelement plus 后端: gogin kubernetes v1.24.2 golang v1.18.3 后端代码地址GitHub - yunixiangfeng/k8s-platform: K8s管理系统后端: gogin Go 快速入门 Gin Web框架 K8s管理系统项目实战[API开发] 项目背景,整体设计,Client-go&#x…

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果

代码随想录算法训练营day34 | 1005.K次取反后最大化的数组和 ,134. 加油站,135. 分发糖果 1005.K次取反后最大化的数组和解法一:两次正常排序解法二:一次排序 134. 加油站135. 分发糖果 1005.K次取反后最大化的数组和 教程视频&a…

生态系统服务(InVEST模型应用)

白老师(研究员):长期从事生态系统结构-格局-过程-功能-服务的变化与响应关系等研究工作;重点围绕生物多样性、生态系统服务与价值等,构建生物地球化学模型和评价指标体系,为城市、区域和自然保护区的可持续…

sqli-labs通关(二十三)

第二十三关 这一关是get类型 当输入?id1时,出现报错信息,是由单引号闭合的 但是输入?id1--的时候,还是报错,说明我们的注释符可能被过滤处理了 查看码源,确实是把注释符过滤了 那我们还是根据语句构造 ?id1 or 1…

本地使用3台centos7虚拟机搭建K8S集群教程

第一步 准备3台centos7虚拟机 3台虚拟机与主机的网络模式都是桥接的模式,也就是他们都是一台独立的“主机” (1)kebe-master的配置 虚拟机配置: 网络配置: (2)kebe-node1的配置 虚拟机配…

(二)用Qt实现登录界面——打造简洁、美观的登录体验

文章目录 一、引言1、什么是Qt框架,其主要特点是什么?2、Qt框架的应用范围,如何在不同的平台上开发应用程序?3、Qt框架的优点和劣势,与其他框架的比较。 二、相关技术1、socket编程 三、Qt框架的使用1、Qt框架的基本概…

数据库与身份认证

目录 1.数据库的基本概念 1.1什么是数据库 1.2常见的数据库及分类 1.3传统型数据库的数据组织结构 2.安装并配置MySQL 2.1了解需要安装哪些MySQL相关的软件 2.2 MySQL在 Windows 环境下的安装 3.MySQL的基本使用 3.1使用 MySQL Workbench 管理数据库 3.1.1连接数据库…

CSS 圆锥渐变+MASK遮罩实现WIFI图标

前言 👏CSS 圆锥渐变MASK遮罩实现WIFI图标,速速来Get吧~ 🥇文末分享源代码。记得点赞关注收藏! 1.实现效果 2.实现步骤 定义css变量–bg背景色,–dot弧宽度,–w父元素宽度,–gap&#xff0c…

docker安装elasticsearch

前言 安装es么,也没什么难的,主要网上搜一搜,看看文档,但是走过的坑还是需要记录一下的 主要参考这三份文档: Running the Elastic Stack on Docker docker简易搭建ElasticSearch集群 Running Kibana on Docker …

模型优化-剪枝 (一)非结构化剪枝

环境 python 3.9numpy 1.24.1pytorch 2.0.0+cu117非结构剪枝 特点 1.简单,将满足某些田间的 weight 置为0即可 2.pytorch容易访问所有参数(weight) 3.最精细化 类型 1.细粒度剪枝(fine-grained) …

数据库创建与管理

目录 一、创建数据库 1.准备创建数据库 2.创建数据库实例分析 方法一:使用对象资源或企业管理器创建数据库 方法二:使用Transact-SQL命令创建数据库 二、管理数据库 1.修改数据库 使用SQL命令修改数据库 2&…

珞珈一号夜间灯光数据处理流程

一、前言 “珞珈一号”卫星是长光卫星技术有限公司首次通过商业化订单为武汉大学研制的卫星,是全球首颗专业夜光遥感卫星,主要用于夜光遥感及导航增强技术验证。卫星整星重量仅为20kg,携带的大视场高灵敏夜光遥感相机,具备130m分辨率、260km幅宽的夜光成像能力,为基于夜光…

【全国大学生统计建模大赛】2023年统计建模大赛赛题解读

目录 关于中国式现代化统计测度的几点思考 (一)房祥忠教授——大局层面 一、现代化释义 二、现代化度量的单变量方法 2.1 单一变量情形 2.2 分组评分 三、现代化度量的多变量方法 3.1 问题 3.2 解决方法 四、现代化度量的理想化方法 4.1 问题 …

SSM整合详细教学(中)

SSM整合详细教学(中) 三、异常处理器问题导入1 异常介绍2 异常处理器2.2.1 编写异常处理器2.2.2 RestControllerAdvice注解介绍2.2.3 ExceptionHandler注解介绍 四、项目异常处理方案问题导入1 项目异常分类2 项目异常处理方案3 项目异常处理代码实现3.1…

zookeeper下载安装集群部署

文章目录 一、zookeeper官网下载二、JDK环境安装三、zookeeper安装1.zookeeper解压2.zookeeper配置文件介绍 克隆服务器1.网络检查2.集群配置3.启动集群 一、zookeeper官网下载 下载地址:https://archive.apache.org/dist/zookeeper/找到对应的版本下载 二、JDK环…