C++---了解STL

news/2025/2/26 10:29:31

上节学习了模板,那么就得谈到C++的标准模板库STL。

C++98:以模板方式重写了C++标准库,引入了STL(标准模板库)。

1.概念

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

2.版本

原始版本

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

P.J.版本

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

RW版本

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

SGI版本

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

STL提供的容器和算法是规定死的,虽然有不同的版本,但是功能一致且内部框架类似。

类似于汽车的不同品牌。

3.六大组件

4.学习方法 

使用、理解、扩展。

能够熟练运用STL标准模板库,理解STL的底层逻辑并且能够去模拟实现;

在使用与理解的基础上,对于一些没有在库中的数据结构进行扩展。

5.缺陷 

①STL库的更新慢。这个得严重吐槽,上一版靠谱是C++98,中间的C++03基本一些修订。C++11出来已经相隔了13年,STL才进一步更新。

②STL现在都没有支持线程安全。并发环境下需要我们自己加锁。且锁的粒度是比较大的。

③STL极度的追求效率,导致内部比较复杂。比如类型萃取,迭代器萃取。

④STL的使用会有代码膨胀的问题,比如使用vector/vector/vector这样会生成多份代码,当然这是模板语法本身导致的。

http://www.niftyadmin.cn/n/5868545.html

相关文章

Pytorch实现之浑浊水下图像增强

简介 简介:这也是一篇非常适合GAN小白们上手的架构文章!提出了一种基于GAN的水下图像增强网络。这种网络与其他架构类似,生成器是卷积+激活函数+归一化+残差结构的组成,鉴别器是卷积+激活函数+归一化以及全连接层。损失函数是常用的均方误差、感知损失和对抗损失三部分。 …

C/C++语言知识点二

1. 编程算法之“哨兵”思想 哨兵思想是一种编程技巧,通过在数据结构的边界或特定位置放置一个特殊值(称为“哨兵”),来简化逻辑判断和提高代码效率。哨兵通常是一个标记值,用于指示某种条件或边界,从而避免…

Linux设备驱动开发-UART驱动

UART 有三条线,分别是 Rx,Tx 和 GND 数据发送接收步骤: 1.双方约定波特率 2.拉低(从高电平) Tx 引脚维持 1bit 时间 3.接收端在低电平开始处计时 4.发送端根据数据驱动 Tx 引脚电平 5.接收端 1.5bit 时间后读取引…

网络安全入门|HTTP慢速攻击的终极防御:零信任与AI对抗

一、零信任架构在防御中的核心挑战 零信任架构(Zero Trust)以“永不信任,持续验证”为核心,但在对抗HTTP慢速攻击时面临以下关键问题: 身份动态验证的性能损耗 问题:频繁的身份验证(如JWT令牌校…

【LLM】本地部署LLM大语言模型+可视化交互聊天,附常见本地部署硬件要求(以Ollama+OpenWebUI部署DeepSeekR1为例)

【LLM】本地部署LLM大语言模型可视化交互聊天,附常见本地部署硬件要求(以OllamaOpenWebUI部署DeepSeekR1为例) 文章目录 1、本地部署LLM(以Ollama为例)2、本地LLM交互界面(以OpenWebUI为例)3、本…

React + TypeScript 全栈开发最佳实践

React TypeScript 全栈开发最佳实践 一、环境搭建与项目初始化 node.js和npm的安装请参考我的文章。 1.1 脚手架选择与工程创建 # 使用Vite 5.x创建ReactTS项目(2025年主流方案) npx create-vitelatest my-app --template react-ts cd my-app npm in…

简单易懂,解析Go语言中的struct结构体

目录 4. struct 结构体4.1 初始化4.2 内嵌字段4.3 可见性4.4 方法与函数4.4.1 区别4.4.2 闭包 4.5 Tag 字段标签4.5.1定义4.5.2 Tag规范4.5.3 Tag意义 4. struct 结构体 go的结构体类似于其他语言中的class,主要区别就是go的结构体没有继承这一概念,但可…

Milvus x DeepSeek 搭建低成本高精度 RAG 实战

为什么手握海量数据,却用不出真正的“智能”?要么 AI 模型学艺不精,答非所问;要么技术门槛太高,让普通开发者望而却步。现在,使用阿里云 Milvus 向量检索服务、DeepSeek 大模型和 PAI LangStudio 开发工具&…