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

相关推荐
水饺编程4 分钟前
第5章,[Win32 章节] :绘制平面直角坐标系
c语言·c++·windows·visual studio
Wang's Blog4 分钟前
Java框架快速入门: Spring Security+OAuth2之深度定制UserDetailsService与密码无缝升级
java·开发语言·spring
没文化的阿浩10 分钟前
【Linux系统】进程状态详解
android·linux·c++·c
白远山12 分钟前
智慧场馆解决方案小程序系统开发实战与架构设计指南
java·开发语言·小程序·架构
ECT-OS-JiuHuaShan14 分钟前
哲学是迭代学,数学是拓扑学
开发语言·人工智能·学习·算法·机器学习·php·拓扑学
leo_messi9414 分钟前
Mysql学习(十二) -- SQL执行到底做了什么事?
sql·学习·mysql
All for pursuit.17 分钟前
【数组-5】560.和为K的子数组
数据结构·c++·算法·leetcode
影视飓风TIM17 分钟前
C++异常与RAII智能指针笔记
开发语言·c++·笔记
欧特克_Glodon18 分钟前
OpenCV计算机视觉开发入门与实践<四十二>:手势识别
c++·人工智能·opencv·计算机视觉·手势识别
敲代码的嘎仔20 分钟前
从零实现视频续播 + 学习进度统计:前端心跳、条件更新、GROUP BY 统计全链路拆解
java·前端·数据库·学习·面试·职场和发展·音视频