C++标准模板库 STL 简介(standard template library)

        在 C 语言中,很多东西都是由我们自己去实现的,例如自定义数组,线程文件操作,排序算法等等,有些复杂的东西实现不好很容易留下不易发现的 bug。而 C++为使用者提供了一套标准模板库 STL,其中封装了很多实用的容器,使用者使用容器的时候就不需要去注意代码的细节实现,使用容器也会更加安全和高效。
        容器的实现就是靠模板类去实现的,例如 C++中的动态数组容器 vector,它其实就是一个类,类中维护了一块地址,然后类中的函数就可以定义为一些数组的行为,例如添加元素,删除元素等等,同时相比于 C 语言中的数组,使用容器因为是类在维护,所以,类中一般会进行安全性判断,对一些不安全的操作会进行规避,例如:C 语言中的数组 a 可以访问 a[-1],但是对于 C++中的容器 a,访问 a[-1]就会被拒绝.
        C++的容器 分别为算法、容器、函数、 迭代器

STL 的优点

1.功能强大、代码精致。STL 由惠普实验室的无数大牛们开发,设计精巧,功能强大,集成了 优秀的算法。
2.高可重用性。 STL 广泛使用模板泛型编程,代码具有高度的复用性。
3.高性能、工业强度。 STL 提供的算法具有工业强度,高性能,用它可开发出性能高效的应用程序。
4.开源跨平台. STL 跨平台,而且开源,开发者可以很容易借鉴与扩展。

STL 的版本

1.HP STL
        HP STL 是 Alexandar Stepanov 在惠普 Palo Alto 实验室工作时,与 Meng Lee 合作完成的。 HP STL 是 C++ STL 的第一个实现版本,而且是开放源码。其它版本的 C++ STL 一般是以 HP STL 为蓝本实现出来的。
2.SGI STL
        由 Silicon Graphics Computer Systems 公司参照 HP STL 实现,主要设计者仍然是 STL 之父 Alexandar Stepanov,被 Linux 的 C++编译器 GCC 所采用。SGI STL 是开源软件,源码可读性甚高。
3.STLport
        为了使 SGI STL 的基本代码都适用于 VC++和 C++ Builder 等多种编译器,俄国人 Boris Fomitchev 建立了一个 free 项目来开发 STLport,此版本 STL 是开放源码的。
4.P.J.Plauger STL
        由 P.J.Plauger 参照 HP STL 实现出来,被 Visual C++编译器所采用,但不是开源的。
5.Rouge Wave STL
        由 Rouge Wave 公司参照 HP STL 实现,用于 Borland C++编译器中,这个版本的 STL 也不 是开源的。

STL 的六大组件

        1、容器(Containers):各种数据结构,如 Vector,List,Deque,Set,Map,用来存放数据,STL 容 器是一种 Class Template,就体积而言,这一部分很像冰山载海面的比率。
        2、算法(Algorithms):各种常用算法如 Sort,Search,Copy,Erase,从实现的角度来看,STL 算法是一种 Function Templates。
        3、迭代器(Iterators):扮演容器与算法之间的胶合剂,是所谓的“泛型指针”,共有五种类 型,以及其它衍生变化,从实现的角度来看,迭代器是一种将:Operators*,Operator->,Operator++,Operator–等相关操作予以重载的 Class Template。所有STL 容器都附带有自己专属的迭代器,只有容器设计者才知道如何遍历自己的元素,原生指针(Native pointer)也是一种迭代器。
        4、仿函数(Functors): 行为类似函数,可作为算法的某种策略(Policy),从实现的角度来看,仿函数是一种重载了 Operator()的 Class 或 Class Template。一般函数指针可视为狭义的
仿函数。
        5、配接器(适配器)(Adapters):一种用来修饰容器(Containers)或仿函数(Functors) 或迭代器(Iterators)接口的东西,例如:STL 提供的 Queue 和 Stack,虽然看似容器,其实只能算是一种容器配接器,因为 它们的底部完全借助 Deque,所有操作有底层的 Deque 供应。 改变 Functor 接口者,称为 Function Adapter;改变 Container 接口者,称为 Container Adapter; 改变 Iterator 接口者,称为 Iterator Adapter。配接器的实现技术很难一言蔽之,必须逐一分析。
        6、分配器(Allocators):负责空间配置与管理,从实现的角度来看,配置器是一个实现了动态空间配置、空间管理、空间释放的 Class Template。

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

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

相关文章

山西电力市场日前价格预测【2023-11-27】

日前价格预测 预测说明: 如上图所示,预测明日(2023-11-27)山西电力市场全天平均日前电价为40.02元/MWh。其中,最高日前电价为293.07元/MWh,预计出现在17:45。最低日前电价为0.00元/MWh,预计出现…

1998-2021年全国各地级市PM2.5平均浓度数据

1998-2021年全国各地级市PM2.5平均浓度数据 1、时间:1998-2021年 2、指标:省、省代码、市、市代码、年份、均值、总和、最小值、最大值、标准差 3、来源:Washington university Atmospheric Composition Analysis Group 4、范围&#xff…

操作系统——解决了我的一些困惑

目录 1、电脑开机做了什么事情 2、真正实现并行的计算机 3、计算机中的淘汰算法 & 分配算法 & 调度算法 & 空间管理 4、什么是虚拟内存?为什么需要虚拟内存?最多可分配多少? 5、TLB(快表)、分页存储&…

微服务--01--简介、服务拆分原则

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 微服务微服务架构,是服务化思想指导下的一套最佳实践架构方案。服务化,就是把单体架构中的功能模块拆分为多个独立项目。 单体架构微服务架构…

Spine深入学习———— 渲染

数据有了之后,就开始渲染 渲染相关 绘制顺序 骨架的绘制顺序就是一个插槽列表,在插槽列表中上方的附件在下方之上绘制,绘制顺序可以在层级树中的骨架下查看。 基础流程 渲染实现 以下按照cocos2dx的实现来 (cocos2dx 3.7 spin…

【云平台】STM32微信小程序阿里云平台汇总——持续更新

【云平台】STM32微信小程序阿里云平台汇总——持续更新 文章目录 前言总结 前言 提示:以下是本篇文章正文内容,下面案例可供参考 【云平台】STM32微信小程序阿里云平台学习板 【云平台】小白从零开始:小程序阿里云平台控制STM32&#xff08…

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据

1980-2022年世界各国专利、商标申请数据/世界各国知识产权专利申请数据 1、时间:1980-2022年 2、来源:WIPO数据库 3、范围:世界各国(180多个国家) 4、指标:国家名称、年份、代码、类型、专利申请总量、…

GPU中的半格效应(half-pixel)

最近在阅读《GPGPU编程技术从GLSL、CUDA到OpenCL》时,章节3.4.3 卷积核中讲到了半格效应,该书中的英文标注为:0.5 effect,也有被称为:half pixel offset等。 联想到我之前的GPU计算、渲染时的代码,在做画质…

TUP通信

一,概括 二,常用方法 三, 实现步骤(一发一收) 四,案例(一接一收) (1),客户端 (2),服务端 (3&…

歌手荆涛作品《父与子》:一首深情演绎父子情感的歌曲

在华语乐坛中,有很多歌曲以亲情为主题,其中歌手荆涛演唱的《父与子》就是其中的代表作之一。这首歌以朴实的歌词和深情的演唱,打动了无数听众的心灵,让人感受到了亲情之间的温暖和牵绊。 《父与子》这首歌以父子为主题&#xff0c…

【C++】类型转换 ④ ( 子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast )

文章目录 一、子类 和 父类 之间的类型转换 - 动态类型转换 dynamic_cast1、构造父类和子类2、子类 和 父类 之间的类型转换 - 隐式类型转换3、子类 和 父类 之间的类型转换 - 静态类型转换 static_cast4、子类 和 父类 之间的类型转换 - 重新解释类型转换 reinterpret_cast5、…

【Java Spring】SpringBoot Bean详解

文章目录 1、Bean方法注解简介2、Bean注解重命名3、对象装配(获取Bean对象)3.1 对象装配之属性注入3.2 对象装配之Set 注入3.3 对象装配之构造方法注入 4、Resource VS Autowired5、Bean对象的作用域5.1 验证Bean对象的默认作用域5.2 Bean对象的六大作用…

论文解读:《数据增强:通过强化学习引导的条件生成进行文本数据扩充》

Title:<Data Boost: Text Data Augmentation Through Reinforcement Learning Guided Conditional Generation> 期刊&#xff1a;EMNLP &#xff08;顶级国际会议&#xff09; 作者 Ruibo Liu; Guangxuan Xu; Chenyan Jia; Weicheng Ma; Lili Wang; et al 出版日期 20…

基于Springboot的墙绘产品展示交易平台(有报告),Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的墙绘产品展示交易平台&#xff08;有报告&#xff09;&#xff0c;Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff0…

手势监听类GestureDetector Listener源码解析

手势监听类GestureDetector 前言一、GestureDetector是什么&#xff1f;二、Listener源码解析1.OnGestureListener2.OnDoubleTapListener3.OnContextClickListener4.SimpleOnGestureListener 总结 前言 在写自定义view的时候&#xff0c;涉及到了手势监听这块的知识&#xff0…

FLV 文件格式分析

前言 flv 是 flash video 的缩写&#xff0c;是 Adobe Flash payler 支持的一种流媒体播放格式。flv 是一种层级格式&#xff0c;除了一个 flv header 外&#xff0c;剩下全是由 一个个 tag 组成。tag 是由 tag 头和 tag 数据组成。tag 类型分为音频、视频、脚本&#xff0c;一…

交换机的VRRP主备配置例子

拓朴如下&#xff1a; 主要配置如下&#xff1a; [S1] vlan batch 10 20 # interface Vlanif10ip address 10.1.1.1 255.255.255.0vrrp vrid 1 virtual-ip 10.1.1.254vrrp vrid 1 priority 200vrrp vrid 1 preempt-mode timer delay 20 # interface Vlanif20ip address 13.1.1…

IDEA的安装与删除插件

不小心安装了一个英文转中文的插件&#xff0c;看不习惯&#xff0c;决定重新变回英文 先点击这个settings的安装 然后就看到这个下面这张图了 如果是安装就点install&#xff0c;不用了就和我一样把这个勾给去掉

MUI框架从新手入门【webapp开发教程】

文章目录 MUI -最接近原生APP体验的高性能前端框架APP开发3.25 开发记录miu框架介绍头部/搜索框&#xff1a;身体>轮播图轮播图设置数据自动跳转&#xff1a;九宫格图片九宫格图文列表底部选项卡按钮选择器手机模拟器 心得与总结&#xff1a;MUI框架在移动应用开发中的应用M…

openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项

文章目录 openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项133.1 检查openGauss状态133.2 检查锁信息133.3 统计事件数据133.4 对象检查133.5 SQL报告检查133.6 备份133.7 基本信息检查 openGauss学习笔记-133 openGauss 数据库运维-例行维护-日维护检查项 …