C++语言第五章:STL学习

一.STL的概念

STL是C++标准库的重要组成部分,提供大量通用、可复用的数据结构与算法。是一个包罗数据结构与算法的软件框架。

核心本质:基于模板实现,代码与类型无关,可以适配任意的数据类型,不需要重复编写容器代码。

二.STL的版本

STL是一套接口标准,不同厂商写出不同实现代码,也就是我们即将要了解的HP、SGI、PJ版本。这些实现对外接口统一,但是底层的源码不同。下面一一介绍这些版本:

HP STL版本:

开发者:Alexander Stepanov(STL 之父)、Meng Lee以及惠普实验室

地位:该版本是所有的STL版本的源头

协议:开源,允许自由使用、修改、分发

现状:不再直接使用,作为后续所有版本的基础

SGI STL版本:

来源:该版本是基于HP STL版本的二次开发。

特点:开源,源码的可读性高

地位:gcc(Linux系统的默认编译器)和libstdC++的底层以此为基础

PJ版本:

特点:早期微软的默认STL实现,闭源,不能公开修改,内部命令晦涩,可读性差。

三.STL的六大组件

容器:管理、存放数据、封装各类数据结构,分为序列容器和关联容器

算法:提供通用处理逻辑,实现排序、查找、拷贝、遍历等操作。算法独立于容器,可复用。

迭代器:容器和算法之间的桥梁,统一访问容器元素,使算法不用关心容器的底层结构,实现算法与容器解耦,行为类似于指针。

仿函数:向算法传递自定义策略,代替普通函数,支持保存状态。

适配器:对现有的容器、仿函数、迭代器进行封装改造 ,生成新组件

空间配置器:专门负责容器内存的分配、释放、封装底层内存管理逻辑,对上层用户透明。

上述就是STL的六大组件,接下来的章节我们会具体学习。尽情期待!!!

四.STL的缺陷

  1. STL库更新很慢
  2. STL没有支持线程安全,并发环境下需要自己加锁,且锁的粒度是比较大的
  3. STL极度的追求效率,导致内部比较复杂
  4. STL的使用会有代码膨胀的问题(模板语法本身导致的)

五.STL的重要性

STL提供成熟的数据结构与算法,开发者不需要从零实现链表、动态数组、排序查找等逻辑,大幅度提升了开发的效率。

STL基于泛型模板编程,一套代码适配多种数据类型,可以实现代码的复用。

STL代码经过长期的优化,执行效率高、稳定性强,优于程序员手写的简易版本。

接口标准化,所有符号标准的编译器实现了API统一,增强了程序的可移植性。

降低开发门槛,统一编码规范,便于项目协作与代码去维护,是C++工业开发基础的工具库。

推动泛型编程的思想普及,改变传统变相过程、面向对象的编程思维。

下面章节我们将进入STL库的详细学习,尽情期待!!!

相关推荐
kkkkkkkkkk_Z11 分钟前
新手自学嵌入式 | 学习日记:Linux驱动复习之系统移植(U-Boot篇)
linux·运维·学习
Rabitebla14 分钟前
【系统性学习笔记】Linux 权限篇(二):文件属性、权限修改与目录权限的底层逻辑
linux·c++·笔记·学习·算法
system_error_x21 分钟前
C++ 编程基础入门教程
开发语言·c++
Amos_Web26 分钟前
Markdonw语法
开发语言·前端·javascript
Wang's Blog43 分钟前
Java 项目实战: 交友项目 - 回顾和今日内容介绍
java·开发语言·交友
初心未改HD1 小时前
DSH Skill开发实战:SKILL.md是给LLM看的操作手册,不是给人看的README,踩了4个坑
java·大数据·开发语言
Wang's Blog1 小时前
Java 项目实战: 交友项目 - SpringData-Mongo 环境搭建和 CRUD
java·开发语言·交友
fanged2 小时前
嵌入式架构学习6--ZSWatch(TODO)
学习
叼烟扛炮2 小时前
Linux 学习笔记(十三):高效排错利器——GDB 调试器入门
linux·笔记·学习
凯瑟琳.奥古斯特2 小时前
动态调优IoU提升OCR文本合并精度
开发语言·python·算法