当前位置: 首页 > article >正文

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

相关文章:

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

文章目录 前言 一、什么是STL 二、STL的版本 1、原始版本 2、P.J.版本 3、RW版本 4、SGI版本 三、闭源、开源 四、STL的六大组件 总结 前言 路漫漫其修远兮,吾将上下而求索; 一、什么是STL STL(standard template libaray 标准模板库)&#…...

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…...

从0开始学vue:实现一个简单页面

Vue.js 是一个渐进式JavaScript框架,用于构建用户界面。下面我将带你从零开始学习Vue.js并创建一个简单的可运行页面。 1. 准备工作 首先,你需要了解几种学习Vue.js的方式: 方式一:使用CDN引入(最简单的方式&#x…...

在机器视觉测量和机器视觉定位中,棋盘格标定如何影响精度

棋盘格标定是机器视觉(尤其是基于相机的系统)中进行相机内参(焦距、主点、畸变系数)和外参(相机相对于世界坐标系的位置和姿态)标定的经典且广泛应用的方法。它的质量直接、显著且多方面地影响最终的视觉测量和定位精度。 以下是棋盘格标定如何影响精度的详细分析: 标定…...

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. 制造…...

JWT 不对外,Session ID 对外:构建安全可控的微服务认证架构

以下是一篇围绕“JWT不对外,Session ID对外”的专业架构设计文章,适用于技术团队评审、技术博客发布或系统设计文档引用: JWT 不对外,Session ID 对外:构建安全可控的微服务认证架构 在构建分布式微服务系统时&#x…...

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

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

React 路由管理与动态路由配置实战

React 路由管理与动态路由配置实战 前言 在现代单页应用(SPA)开发中,路由管理已经成为前端架构的核心部分。随着React应用规模的扩大,静态路由配置往往难以满足复杂业务场景的需求,尤其是当应用需要处理权限控制、动态菜单和按需加载等高级…...

ZYNQ sdk lwip配置UDP组播收发数据

🚀 一、颠覆认知:组播 vs 单播 vs 广播 通信方式目标设备网络负载典型应用场景单播1对1O(n)SSH远程登录广播1对全网O(1)ARP地址解析组播1对N组O(1)视频会议/物联网群控创新价值:在智能工厂中,ZYNQ通过组播同时控制100台AGV小车,比传统单播方案降低92%网络流量! 🔧 二、…...

11.21 LangGraph多轮对话系统实战:三步构建高效信息整理引擎,效率提升300%!

关键词:LangGraph 工作流设计, 信息整理助理, 多轮对话系统, 状态管理, 条件分支控制 信息整理助理工作流设计 信息整理助理需要完成 多源数据收集 → 信息分类 → 深度分析 → 结构化输出 的完整流程。通过 LangGraph 的图结构工作流,可实现复杂逻辑的模块化编排: #mermai…...

高光谱成像相机:基于高光谱成像技术的玉米种子纯度检测研究

种子纯度是衡量种子质量的核心指标之一,直接影响农作物产量与品质。传统检测方法(如形态学观察、生化分析)存在耗时长、破坏样本、依赖人工等缺陷。近年来,高光谱成像技术因其融合光谱与图像信息的优势,成为无损检测领…...

Linux《文件系统》

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

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

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

【Python办公】将Excel表格转json(字典)数据-可自定义key和value

目录 专栏导读背景介绍库的安装数据源准备代码1:key1列,value所有列代码1:key多列,value所有列代码3:key自选,value自选总结专栏导读 🌸 欢迎来到Python办公自动化专栏—Python处理办公问题,解放您的双手 🏳️‍🌈 博客主页:请点击——> 一晌小贪欢的博客主页求关…...

Java内存区域与内存溢出异常分析与解决

在 Java 开发中,内存管理和内存溢出异常( OutOfMemoryError)是一个至关重要的主题。Java 虚拟机(JVM)的内存区域分为多个部分,每个区域都有其特定的用途和限制。当这些区域的内存耗尽时,就会触发…...

Python训练第四十天

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

硬件实时时钟(RTC)

硬件实时时钟(RTC)详解 硬件实时时钟(Real-Time Clock,RTC)是计算机主板上的一个独立计时芯片,用于在系统关机后持续记录时间。它不依赖操作系统,由纽扣电池(如CR2032)供…...

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

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

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

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

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

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

leetcode hot100 二叉树(一)

1.二叉树的中序遍历 中序遍历&#xff08;中根遍历&#xff09;&#xff1a;左-根-右顺序&#xff0c;递归实现。注意设置递归终止条件。 class Solution { public:void search(TreeNode* root,vector<int>& ans){if(!root) return ;search(root->left,ans);ans.…...

【技术支持】安卓11开机启动设置

<!-- 开机自启动权限 --><uses-permission android:name"android.permission.RECEIVE_BOOT_COMPLETED" /><!-- 自启动权限 --><uses-permission android:name"android.permission.REQUEST_IGNORE_BATTERY_OPTIMIZATIONS" /><!-…...

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

本文全面剖析现代数据湖架构的核心组件,深入探讨对象存储(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.拉取文件系统 这边我参照墨云大神的文档&#xff0c;但是华为镜像已经没有armel了&#xff0c;我找到了官方仓库&#xff0c;还是有的&#xff0c;拉取速度比较慢 sudo d…...

dis css port brief 命令详细解释

华为交换机命令 display css port brief 详细解释 display css port brief 是华为交换机中用于 快速查看堆叠&#xff08;CSS&#xff0c;Cluster Switch System&#xff09;端口状态及关键参数 的命令&#xff0c;适用于日常运维、堆叠链路健康检查及故障定位。以下是该命令的…...

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

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

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; …...