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

相关推荐
绿浪19841 天前
c# 结构体 能不能直接封送检测
开发语言·c#
_Narcissus_1 天前
排序算法总结表格
c语言·数据结构·c++·笔记·算法·排序算法·总结
新手unity自用笔记1 天前
unity基于Socket的网络学习
网络·网络协议·学习·unity·c#·游戏引擎
zyf1044161 天前
暑期实践日志 Day32:完成第六章字幕添加,推进工作
学习·计算机网络·剪辑·暑期实践·课题任务
小雪崩1 天前
嵌入式学习 day27:标准IO
linux·c语言·学习
hsjiasb1 天前
FreeRTOS学习(三十五)——系统架构综合项目
学习·学习笔记·freertos
YM52e1 天前
语言地区选择器-鸿蒙ArkTS国际化页面设计
学习·华为·harmonyos
橙橙笔记1 天前
QT的安装
开发语言·qt·安装·软件
不是光头 强1 天前
Java 后端 AI 技术选型与学习路线
java·人工智能·学习
cloudification1 天前
virtual
学习