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

news2025/6/5 5:24:33

文章目录

前言

一、什么是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++的学习中非常重要,需要我们熟练掌握容器接口的使用……

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

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

相关文章

Flutter - 原生交互 - 相机Camera - 01

环境 Flutter 3.29 macOS Sequoia 15.4.1 Xcode 16.3 集成 Flutter提供了camera插件来拍照和录视频,它提供了一系列可用的相机,并使用特定的相机展示相机预览、拍照、录视频。 添加依赖 camera: 提供使用设备相机模块的工具path_provider: 寻找存储图…

湖北理元理律师事务所:个人债务管理的温度与精度

湖北理元理律师事务所:个人债务管理的温度与精度 面对信用卡、网贷、医疗债等多重债务压力,普通人常陷入“拆东墙补西墙”的恶性循环。湖北理元理律师事务所通过计划集团公司服务平台,推出“有温度的债务优化计划”,其人性化设计…

Compose原理 - 整体架构与主流程

一、整体架构 在官方文档中(Jetpack Compose 架构层 | Android Developers),对Compose的分层有所阐述: 其中 Runtime:提供Compose的基础运行能力,包括State、Side-effects、CompositionLocal、Compositio…

CppCon 2014 学习: C++ Test-driven Development

“Elephant in the Room”这个比喻常用来形容那些大家都知道但没人愿意讨论的重大问题。 这段内容讲的是软件质量管理的经典做法和潜在的问题: 经典做法:开发完成后才进行人工测试(manual testing after creation)。隐喻“Cape o…

RAGflow详解及实战指南

目录 前言 一、RAGflow核心技术解析 1. 技术原理:检索与生成的协同进化 2. 架构设计:分层模块化与高扩展性 3. 核心优势:精准、高效、安全 二、RAGflow实战应用场景 1. 企业知识库搭建 2. 智能客服系统 3. 投资分析报告生成 4. 制造…

[Godot] 如何导出安卓 APK 并在手机上调试

在之前的文章中,我们已经详细介绍了如何配置 Godot 的安卓应用开发环境,包括安装 Android SDK、配置 Java 环境、设置 Godot 的 Android 导出模板等。本篇文章将进一步讲解如何将 Godot 项目导出为安卓 APK 文件,并实现在手机上进行调试运行。…

Linux《文件系统》

在之前的系统IO当中已经了解了“内存”级别的文件操作,了解了文件描述符、重定向、缓冲区等概念,在了解了这些的知识之后还封装出了我们自己的libc库。接下来在本篇当中将会将视角从内存转向磁盘,研究文件在内存当中是如何进行存储的&#xf…

NLP学习路线图(十六):N-gram模型

一、为何需要语言模型?概率视角下的语言本质 自然语言处理的核心挑战在于让机器“理解”人类语言。这种理解的一个关键方面是处理语言的歧义性、创造性和结构性。语言模型(Language Model, LM)为此提供了一种强大的数学框架:它赋…

Python训练第四十天

DAY 40 训练和测试的规范写法 知识点回顾: 彩色和灰度图片测试和训练的规范写法:封装在函数中展平操作:除第一个维度batchsize外全部展平dropout操作:训练阶段随机丢弃神经元,测试阶段eval模式关闭dropout 昨天我们介绍…

InternVL2.5-多模态大模型评估专业图片

具备图像理解功能的大模型InternVL2.5,能有效解析大部分图片。 对于专业图片如医学细胞切片,从专业角度解析,能推动模型应用到更广泛的领域。 InternVL2.5解析示例 prompt(胸部癌变细胞图片,来自PanNuke) 请评估这个组织的风险 InternVL2.…

医疗数理范式化:从范式迁移到认知革命的深度解析

引言 在当代医疗领域,数理思维已经从辅助工具逐渐发展成为核心决策支持系统的关键组成部分。随着数字技术的迅猛发展,医疗行业正经历着前所未有的变革,而数理思维作为这一变革的核心驱动力,正在深刻重塑医疗实践的方方面面。数理思维在医疗领域的应用,本质上是将抽象的数…

图神经网络在信息检索重排序中的应用:原理、架构与Python代码解析

现代信息检索系统和搜索引擎普遍采用两阶段检索架构,在人工智能应用中也被称为检索增强生成(Retrieval-Augmented Generation, RAG)。在初始检索阶段,系统采用高效的检索方法,包括词汇检索算法(如BM25&…

现代数据湖架构全景解析:存储、表格式、计算引擎与元数据服务的协同生态

本文全面剖析现代数据湖架构的核心组件,深入探讨对象存储(OSS/S3)、表格式(Iceberg/Hudi/Delta Lake)、计算引擎(Spark/Flink/Presto)及元数据服务(HMS/Amoro)的协作关系,并提供企业级选型指南。 一、数据湖架构演进与核心价值 数据湖架构演进历程 现代数据湖核心价…

全志F1c200开发笔记——移植Debian文件系统

1.搭建环境 sudo apt install qemu-user-static -y sudo apt install debootstrap -y mkdir rootfs 2.拉取文件系统 这边我参照墨云大神的文档,但是华为镜像已经没有armel了,我找到了官方仓库,还是有的,拉取速度比较慢 sudo d…

支持功能安全ASIL-B的矩阵管理芯片IS32LT3365,助力ADB大灯系统轻松实现功能安全等级

随着自动驾驶技术的快速发展,汽车前灯智能化也越来越高。自适应远光灯 (ADB) 作为一种智能照明系统,在提升驾驶安全性和舒适性方面发挥着重要作用。ADB 系统通过摄像头和传感器获取前方道路信息,例如来车的位置、距离和速度,并根据…

BFS入门刷题

目录 P1746 离开中山路 P1443 马的遍历 P1747 好奇怪的游戏 P2385 [USACO07FEB] Bronze Lilypad Pond B P1746 离开中山路 #include <iostream> #include <queue> #include <cstring> using namespace std; int n; int startx, starty; int endx, endy; …

UE5 编辑器工具蓝图

文章目录 简述使用方法样例自动生成Actor&#xff0c;并根据模型的包围盒设置Actor的大小批量修改场景中Actor的属性&#xff0c;设置Actor的名字&#xff0c;设置Actor到指定的文件夹 简述 使用编辑器工具好处是可以在非运行时可以对资源或场景做一些操作&#xff0c;例如自动…

数据仓库分层 4 层模型是什么?

企业每天都在产生和收集海量数据。然而&#xff0c;面对这些数据&#xff0c;许多企业却陷入了困境&#xff1a;如何高效管理、处理和分析这些数据&#xff1f;如何从数据中提取有价值的信息来支持业务决策&#xff1f;这些问题困扰着众多数据分析师和 IT 管理者。 在众多架构…

基于亚博K210开发板——物体分类测试

开发板 亚博K210开发板 实验目的 本次测试主要学习 K210 如何物体分类&#xff0c;然后通过 LCD 显示屏实时显示当前物体的分类名称。本节采用百度出的 PaddlePaddle 平台开发。 实验元件 OV2640 摄像头/OV9655 摄像头/GC2145 摄像头、LCD 显示屏 硬件连接 K210 开发板…

什么是缺页中断(缺页中断详解)

文章目录 【操作系统】什么是缺页中断&#xff08;缺页中断详解&#xff09;一、缺页中断的本质与背景1. **虚拟内存与分页机制**2. **缺页中断的定义** 二、缺页中断的触发场景1. **首次访问新分配的虚拟页**2. **内存置换导致的页缺失**3. **访问权限冲突**4. **页表项无效**…