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库的详细学习,尽情期待!!!

相关推荐
java资料站3 小时前
十一、评估测试
开发语言·人工智能·python
左手の明天4 小时前
SLIP 协议封装与解析详解:原理、C 代码与实战案例
linux·c语言·开发语言·c++
扶风ff4 小时前
新品知识更新太快?用练题簿在线刷题,安排企业培训的小测与复盘
前端·学习·小程序
海上小飞龙4 小时前
【KMP算法-下篇】同一道题:Java 库函数 2600 微秒,手写 KMP 16 微秒
java·开发语言·算法
青少儿编程课堂4 小时前
后缀自动机解析:本质不同子串与最长重复片段统计
c++·python·算法·bfs·信息学竞赛
朝朝辞暮i4 小时前
C++ 第 12 课:局部变量、作用域、变量生命周期
开发语言·c++·算法
狗凯之家源码网4 小时前
淘客口令落地页生成器 PHP 版深度评测
开发语言·php
画绛集美术4 小时前
本地化部署LLM用于美术史问答:一间美术教室的实践记录
开发语言·php
八解毒剂5 小时前
【计组】中央处理器CPU
java·开发语言·计算机组成原理
FakeOccupational6 小时前
【电路笔记 信号】DBPSK 波形查找表+脉冲成形(升余弦+根升余弦滤波)
开发语言·笔记