C++ - STL #什么是STL #STL的版本 #闭源开源 #STL的六大组件

【STL详解】STL标准模板库入门 | STL版本 | STL六大组件 | STL优点 | 常用STL容器vector、list和map | STL算法函数 | STL使用异常原因分析与总结 本文详细介绍STL标准模板库相关的内容,包括STL版本、STL六大组件、STL优点、常用的STL容器vector、list与map、提升效率的STL算法函数的使用、STL使用异常常见原因分析与总结等,以供大家参考。 阅读详情

文章目录

前言

一、什么是STL

二、STL的版本

1、原始版本

2、P.J.版本

3、RW版本

4、SGI版本

三、闭源、开源

四、STL的六大组件

总结


前言

路漫漫其修远兮,吾将上下而求索;


一、什么是STL

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

注:标准库指的是C++所有官方实现的库;而STL(标准模板库),用模板去实现常见的数据结构与算法;C++之中提供的标准库中提供数据结构和算法的一套库,以方便我们去使用;

Q:标准库中除了STL还有什么?

  • IO流库、线程库、异常、智能指针……

二、STL的版本

STL(Standard Template Library)的设计与实现并非由C++创始人本贾尼·斯特劳斯特鲁普(Bjarne Stroustrup)直接完成,而是由Alexander Stepanov、David Musser和 Meng Lee在惠普实验室开发。该项目后来以开源方式发布,代码开放给社区,最终被纳入C++标准库,成为现代C++的核心组成部分。STL的核心贡献在于引入了泛型编程范式,提供了容器、算法和迭代器的高效抽象,极大提升了C++的灵活性和性能表现。

注:开源有一个开源协议的要求:如果你进行了有效的修改,你也要像原始版本一样开源(不开源的话,别人有权告你);

1、原始版本

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

2、P.J.版本

 P.J. Plauger 基于 HP STL 开发了自己的实现,并创立了 Dinkumware 公司来提供商业化的 C/C++ 标准库实现;不能公开或者修改,缺陷:可读性比较差,符号命名比较怪异; Microsoft Visual C++ 长期采用 Dinkumware 的 STL (以及整个 C++ 标准库) 作为其实现基础。直到较新版本的 MSVC (如 VS 2019/2022 的部分版本) 才开始逐步替换为微软自研的实现(但仍有继承关系)

3、RW版本

由Rouge Wage 公司开发,继承自HP版本,被 Borland C++ Builder采用,不能公开或者修改,可读性一般;大概二十年前,Builder 比较出名的,但是后来被微软干掉,没人维护于是就没落了;

4、SGI版本

由Silicon Graputer Systems ,Ins 公司开发,继承自HP版本,被 GNU C++ Library (libstdc++) 采用作为其 STL 部分的基础实现。而 libstdc++ 是 GCC (GNU Compiler Collection) 的默认 C++ 标准库,因此广泛应用于 Linux 系统以及其他使用 GCC 的平台(如早期的 Mac OS X, Cygwin, MinGW 等);SGI版本可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。

我们在谈STL这个库的时候需要注意在VS版本下的STL源代码与Linux 下STL的源代码是不一样的;虽然P.J.版本和SGI版本会提供相同的接口,但是其底层实现是不同的(eg. string的扩容方式;在SGI版本中采用2倍扩容,但是P.J.版本是1.5 倍扩容);

三、闭源、开源

需要注意的是,计算机中的源代码分为闭源、开源;

  • 闭源:由商业公司开发的,其源代码不会对外公布;eg.Windows、mas oc 
  • 开源:eg.Linux、git  开源就意味着免费;因为免费,所以各公司的服务器都是部署在Linux 上面;如果公司有一些特殊需求,可以招一些搞内核的人,对操作系统进行一些改造(重写驱动等)

注:Gitub 是利用git 这个开源项目去搭建的网站而形成的一个“社会”;

Q: 闭源与开源分别有什么优缺点?

  • 开源的项目如果不是特别出名,是很难维护起来的,即使比较出名的开源项目可能到一定的阶段就有可能没有多少人去维护;闭源的项目,具有商业性质,会以公司的性质去招募一些人来对这个闭源项目进行维护、发展;不要认为开源一定好,而闭源的不一定好……其实开源和闭源各有各的好处;

四、STL的六大组件

STL的核心是数据结构与算法,但其中又分为了6大组件

其中空间配置器就是内存池;

内存池是给容器使用的;因容器可能会高频地申请释放内存,不建立内存池便会在堆上向操作系统申请空间,而不停地打断操作系统会有严重的效率损失,故而STL给他自己所有的容器统一建立了一个内存池以供其专用以提高这些数据结构申请、释放内存的效率;需要注意的是,部分算法若会高频地申请、释放内存,内存池也会给部分算法使用,eg.归并排序;


总结

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

2、STL在C++的学习中非常重要,需要我们熟练掌握容器接口的使用……

Silvaco光电探测学习笔记(一)——有关响应和暗电流 习惯用md记笔记,索性发出来,一是为了在线同步,二是希望能帮到需要的人。 阅读详情

相关推荐

STM32 CubeMX实战:手把手教你用I2C驱动IST8310磁力计(附完整代码)

本文详细介绍了如何使用STM32 CubeMX和I2C驱动IST8310磁力计,从硬件连接到代码实现的完整流程。重点讲解了I2C通信异常处理、传感器初始化序列优化以及中断驱动数据采集方案,帮助开发者快速搭建可靠的地磁场数据采集系统。

weixin_42531163的博客 189

C++STL简介

超详细的C++STL简介讲解你值得拥有

weixin_53811859的博客 1607

京东礼品卡绑定技术解析与安全验证实践

电商系统开发中,卡券绑定是常见的业务场景,其核心在于安全验证机制的设计与实现。从技术原理来看,现代验证系统通常采用多层防护,包括前端数据加密、行为验证(如滑块验证)和风控校验等关键技术。这些机制通过设备指纹采集、请求签名验证等方式,有效防范自动化攻击。在实际工程实践中,开发者需要特别关注接口鉴权流程,正确处理安全令牌(如st/vt令牌)和请求签名。京东礼品卡绑定作为典型案例,展示了如何平衡用户体验与系统安全,其验证系统会持续升级,需要开发者跟踪接口变化。对于企业级应用,建议采用混合模式技术方案,结合浏览器自

weixin_28607671的博客 234

【C++】STL简介(了解)【STL的概念,STL的历史缘由,STL六大组件、STL的重要性、以及如何学习STL、STL的缺陷的讲解】

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

NiNi_suanfa的博客 770

玩转肺癌目标检测数据集Lung-PET-CT-Dx ——①从TCIA获取影像数据集

该目标检测公共数据集源自 The Cancer Imaging Archive(TCIA),是肿瘤研究方面的著名的医学影像公开数据库。 数据以 DICOM 格式存储,由肺癌受试者的 CT 和 PET-CT DICOM 图像组成。

takedachia的博客 1万+

JAVA进阶面试题:如何设计一个高并发系统?

如何设计一个高并发系统? 面试官心理分析 说实话,如果面试官问你这个题目,那么你必须要使出全身吃奶劲了。为啥?因为你没看到现在很多公司招聘的 JD 里都是说啥,有高并发就经验者优先。 如果你确实有真才实学,在互联网公司里干过高并发系统,那你确实拿 offer 基本如探囊取物,没啥问题。面试官也绝对不会这样来问你,否则他就是蠢。 假设你在某知名电商公司干过高并发系统,用户上亿,一天流量几十亿,高峰期并发量上万,甚至是十万。那么人家一定会仔细盘问你的系统架构,你们系统啥架构?怎么部署的?部署了多少台机器

uuop155的博客 1019

C++初阶 - 7.STL简介

1.什么是STL 2.STL的版本 3.STL的六大组件 4.STL的重要性 5.如何学习STL 6.STL的缺陷

weixin_52872520的博客 672

如何借助GPT- 6 写好一篇论文:从引言到参考文献完整步骤(附专业提示词)

七哥就结合这篇文章的写作思路,依次拆解引言、方法、结果、讨论、摘要、标题和参考文献分别应该怎么写,同时也聊聊,在每一个环节里,我们可以怎样合理借助 GPT-6,让论文写作变得更清晰、更高效。可以和七哥交流学术写作或Gemini、GPT、Claude 等大模型 学术实操相关问题,多多交流,相互成就,共同进步。8、不修改、不补写、不猜测任何样本量、阈值、剂量、设备型号、参数或统计方法,所有缺失但影响方法完整性的信息统一标记为【待作者确认】、检查方法中设定的每一个分析项目能否在后续结果章节找到对应位置。

智能AI让学术科研更容易 109

C++的STL简介(一)

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

2302_81171591的博客 2414

无刷电机FOC硬件电路设计

本文先对MIT无刷电机FOC硬件电路分析做个简单的介绍,具体内容后续再更,其他模块可以参考去我其他文章软件程序在我另外一个博客【嵌入式–伺服电机】MIT无刷电机FOC驱动程序分析。

qq_35635374的博客 574

IgH EtherCAT 从入门到精通:第 3 章 第一次运行 Hello EtherCAT

摘要:启动EtherCAT主站实践指南 本章详细介绍了如何配置和启动EtherCAT主站系统,主要内容包括: 配置文件详解:讲解/etc/ethercat.conf中的关键配置项,包括主网卡指定、冗余备份设置和网卡驱动选择。 启动流程:说明通过systemd服务和手动命令两种方式加载内核模块,重点介绍了ec_master和ec_generic模块的加载顺序及验证方法。 命令行工具:列举ethercat工具的常用命令,如查看主站状态、扫描从站设备、读取PDO/SDO数据等。 示例程序:简要介绍内核态示例min

从事嵌入式linux android驱动开发,拥有全栈能力 311

【C++ 学习 ⑧】- STL 简介

从 STL 是什么、STL 的版本、STL 的 6 大组件和 13 个头文件、学习 STL 的 3 个境界以及 STL 的缺陷这五个方面来介绍 STL。

melonyzzZ的博客 2250

在实车上进行lio-sam测试

PS:将雷达和imu相对固定后,拆下来,原地晃啊晃,直到xyz进度达到百分百,参考gif。标定完成后,会在result文件夹下生成result.txt。

如果想成为中心,那么就到中心去吧。 997

通过一篇文章让你了解STL是什么

STL(Standard Template Library)是C++编程语言的一个标准库,包含了一系列模板类和函数,用于实现常见的数据结构和算法。它分为容器(Containers)、迭代器(Iterators)、算法(Algorithms)和配接器(Adapters)四个部分。STL的目的是提供高效、灵活、可复用的代码,以便快速构建高质量的C++程序。通过使用STL,程序员可以避免重新发明轮子,提高代码的可读性和可维护性。

qq_74013365的博客 1775

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

【C++】— 一篇文章让你认识STL

STL是的简称,中文名是标准模板库,是C++标准库的重要组成部分,它不仅是一个可以复用的组件库,而且还是包罗了数据结构与算法的软件框架。

2301_81290732的博客 1576

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

C++之<STL>简介

这章简介过去后,我们将开始正式的进行 STL的学习!!!STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架…STL距今共有四个版本,分别如下:总结:总结:如果没有STL,那我们必须手造一个轮子来进行题求解在面试中 在工作中 网上有句话说:“不懂STL,不要说你会C++”。STL是C++中的优秀作品,有了它的陪伴,许多底层的数据结构以及算法都不需要自己重新造轮子,站在前人的肩膀上,健步如飞的快

gangaue的博客 341

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

C++标准模板库(STL)详解

STL(Standard Template Library,标准模板库)是C++标准库的重要组成部分,它提供了一套高效、可复用的通用数据结构和算法框架。STL本质上是一个基于模板的泛型编程库,包含了丰富的数据结构(容器)、算法、迭代器和函数对象等组件。泛型编程:通过模板实现与数据类型无关的算法和数据结构高性能:经过精心优化,运行效率接近手工编写的代码标准化:作为C++标准的一部分,具有统一的接口规范可扩展性:用户可以方便地添加新的容器或算法。

Made In SQL 1154

STL简介

STL简介

2302_80190394的博客 1454

【C++】STL简单介绍(了解入门!!!!)

C++ Standard Template Library(STL)是C++编程语言的重要组成部分,它提供了丰富的数据结构和算法,为C++程序员提供了高效、可靠的编程工具。STL作为C++标准库的核心部分,具有重要的意义。本文将通过代码示例,详细介绍STL的基本概念、版本、组件、重要性、学习方法以及可能的缺陷,旨在帮助读者更好地了解和应用STL。STL是C++标准库的一部分,是一组通用的模板类和函数,提供了丰富的数据结构和算法,用于解决各种常见的编程问题。STL的设计思想是泛型编程。

m0_68002296的博客 5082

C++初阶-STL简介

STL(standard template library-标准模板库);是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。用简单易懂的话来说就是用模板实现数据结构和算法的库,我们在之前讲了顺序表、链表、二叉树等数据结构,这个库里面都包含,所以我们现在用STL就可以不用自己写数据结构和算法了,这样简化了我们的时间。

博客是在C++/Java/Liunx/算法的学习阶段所写的博客,内容可能不是很全面 1479

[C++] STL简介

STL(Standard Template Library,标准模板库)是一种C++的模板类库,提供了一系列通用的数据结构和算法。STL包括了一些容器(如vector、list、map等)、算法(如排序、搜索等)和迭代器等,可以帮助开发人员快速地实现各种常用的数据结构和算法操作。我们即将开始STL部分的学习,相信大家学系完后会有爽到飞起这样的感觉!完!

2302_81016149的博客 1155

STL:模版初阶 | STL简介

大家都知道,瓦特改良蒸汽机,人类开始了工业革命,解放了生产力。机器生产淘汰掉了很多手工产品。本质是什么,重复的工作交给了机器去完成。有人给出了论调:懒人创造世界。

weixin_51142926的博客 2916

01 STL概论与版本介绍

STL源码剖析系列笔记

CltCj的博客 732

C++之STL心法#1-STL版本介绍及源码下载编译

学习STL前要知道的哪些事;STL入门知识;STL学习环境搭建;cygnus安装;cygnus for windows

Allen Roson 3079

C++的STL简介(·什么是STL·STL的版本·STL的六大组件·STL的重要性· 如何学习STL·STL的缺陷)

【本节目标】 ·1. 什么是STL ·2. STL的版本 ·3. STL的六大组件 ·4. STL的重要性 ·5. 如何学习STL ·6.STL的缺陷 1. 什么是STL STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。 2. STL的版本 ·原始版本 Alexander Stepanov、Meng Lee 在惠普实验室完成的原始版本,本着开源精神,他们声明允许任何人任.

weixin_56054625的博客 1059

++ STL的各种实现版本介绍

ANSI/ISO的C++ STL规范版本正式通过以后,各个C++编译器厂商就可以依照标准所描述的原型去实现C++ STL泛型库,于是出现多种符合标准接口,但具体实现代码不同的泛型库,主要有: HP STL HP STL是Alexandar Stepanov在惠普Palo Alto实验室工作时,与Meng Lee合作完成的。HP STL是C++ STL的第一个实现版本,而且是开放

Stroller 2692
上一篇: C++ - 模板(一) #泛型编程 #函数模板 #类模板
下一篇: 位运算 #常见位运算总结 #题解
秦少游在淮海
博客等级 码龄3年 1071粉丝 88原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值