C++初阶4:STL简介

STL(standard template libaray-标准模板库):是C++标准库的重要组成部分,不仅是一个可复用的组件库,而且是一个包罗数据结构与算法的软件框架。核心价值是"代码复用+性能优化",让开发者无需重复实现基础数据结构和算法。

一、STL的发展历史

起源:由计算机科学家 Alexander Stepanov 于 20 世纪 80 年代末设计,最初并非 C++ 标准,后因实用性被广泛认可。

标准化:1998 年被正式纳入 C++ 标准(C++98),成为 C++ 语言的核心特性;后续 C++11/14/17 等标准对其进行了扩展(如新增 std::array、std::unordered_map 等容器)。

设计理念:基于"泛型编程"(模板技术),实现"数据结构与算法分离"------同一算法可适配不同数据结构,同一数据结构可搭配不同算法,灵活性极强。

二、STL的版本

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

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

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

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

三、STL的核心学习内容

1. 容器(Containers)

核心定位:STL 中存储数据的具体数据结构,是数据的"载体"。

分类与核心成员:

• 序列式容器:string(字符串)、vector(动态数组)、list(双向链表)、deque(双端队列)

• 关联式容器:map(键值对,键唯一)、set(集合,元素唯一)、multimap(键可重复的map)、multiset(元素可重复的set)

容器适配器基于这些基础容器实现,并非独立基础容器。

核心特点:模板化实现,自动管理内存,支持迭代器访问。

2. 算法(Algorithms)

核心定位:操作容器中数据的通用函数,与容器解耦,通过迭代器实现数据操作。

思维导图核心成员:find(线性查找)、swap(交换元素)、reverse(反转序列)、sort(排序)、merge(合并有序序列)。

扩展:还包含计数(count)、删除(remove)、二分查找(binary_search)等,均为模板函数,适配不同容器。

3. 迭代器(Iterators)

核心定位:容器与算法之间的"桥梁",模拟指针行为(不是指针) ,提供统一的元素访问接口。

思维导图核心成员:

• iterator:普通可读可写迭代器

• const_iterator:只读迭代器(不能修改容器元素)

• reverse_iterator:反向迭代器(从容器末尾向前遍历)

• const_reverse_iterator:只读反向迭代器

核心作用:让算法无需关心容器内部结构,只需通过迭代器即可遍历/操作元素。

4. 仿函数(Functors,也叫函数对象)

核心定位:重载operator()的类对象,行为类似函数,用于自定义算法的逻辑规则。

思维导图核心成员:greater(大于比较)、less(小于比较),是STL内置的仿函数。

核心用途:

• 作为算法的参数,比如sort中传入greater<int>()实现降序排序。

• 自定义仿函数可实现复杂的判断/运算逻辑(如结构体排序的自定义规则)。

5. 适配器(Adapters)

核心定位:对STL基础组件(容器、迭代器、仿函数)进行包装,改变其接口或功能的"包装器"。

思维导图核心成员:stack(栈,LIFO)、queue(队列,FIFO)、priority_queue(优先队列),均为容器适配器。

核心特点:不直接存储数据,而是复用deque/vector等基础容器的底层实现,仅对外提供特定的接口(如栈的push/pop/top)。

6. 空间配置器(Allocator)

核心定位:STL的"内存管家",负责为容器分配、释放内存,是容器的底层内存管理组件。

思维导图核心标识:allocator(STL默认的空间配置器)。

核心作用:

• 封装了内存分配的细节(如new/delete的调用),让容器无需关心内存申请/释放。

• 可自定义空间配置器,实现特殊的内存管理策略(如内存池),提升内存使用效率。

四、学习意义

STL是C++学习中必须要掌握的一部分,而且它为我们提供了很多好用的工具,不仅避免了我们在实现一些东西上重复的造轮子,而且大大提高我们代码的运行效率。在一些竞赛和比赛也是必须要使用的。

相关推荐
Anastasiozzzz5 分钟前
Java Lambda 揭秘:从匿名内部类到底层原理的深度解析
java·开发语言
刘琦沛在进步8 分钟前
【C / C++】引用和函数重载的介绍
c语言·开发语言·c++
机器视觉的发动机20 分钟前
AI算力中心的能耗挑战与未来破局之路
开发语言·人工智能·自动化·视觉检测·机器视觉
HyperAI超神经28 分钟前
在线教程|DeepSeek-OCR 2公式/表格解析同步改善,以低视觉token成本实现近4%的性能跃迁
开发语言·人工智能·深度学习·神经网络·机器学习·ocr·创业创新
R_.L38 分钟前
【QT】常用控件(按钮类控件、显示类控件、输入类控件、多元素控件、容器类控件、布局管理器)
开发语言·qt
奶茶精Gaaa1 小时前
工具分享--json在线转换工具
学习
Zach_yuan1 小时前
自定义协议:实现网络计算器
linux·服务器·开发语言·网络
我在人间贩卖青春1 小时前
C++之this指针
c++·this
云姜.1 小时前
java多态
java·开发语言·c++
CoderCodingNo1 小时前
【GESP】C++五级练习题 luogu-P1865 A % B Problem
开发语言·c++·算法