🌱博客主页:青竹雾色间
😘博客制作不易欢迎各位👍点赞+⭐收藏+➕关注
✨人生如寄,多忧何为 ✨
目录
一、初识STL
1.1 STL概论
STL(Standard Template Library)是C++标准库的一部分,提供了一系列通用的模板类和函数,用于实现常见的数据结构和算法。它的设计目标是提供高效、可靠、易用的工具,使C++程序员能够更容易地开发复杂的软件系统。
1.1.1 STL历史
STL最初由Alexander Stepanov和Meng Lee于20世纪90年代初开发,并在1994年首次发布。STL最初是作为C++标准库的一部分,但后来也被移植到其他编程语言中,如Java和Python。STL的设计受到了泛型编程和抽象数据类型理论的影响,旨在提供一种灵活、高效的编程范式。
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)采用,可移植性好,可公开、修改甚至贩卖,从命名风格和编程风格上看,阅读性非常高。
1.1.2 STL与C++标准库
虽然STL是C++标准库的一部分,但它并不是C++标准的正式一部分。C++标准库包含了STL以及其他一些模块,如输入输出流、字符串处理等。STL通常被视为C++标准库中最重要和最有用的部分之一,因为它提供了丰富的数据结构和算法,可以大大简化C++程序的开发过程。
二、STL六大组件
STL主要由以下六大组件组成:
2.1容器(Container)
容器是STL中最基本的组件之一,用于存储和管理元素集合。STL提供了多种容器,包括:
- 序列容器:向量(vector)、链表(list)、双端队列(deque)
- 关联容器:集合(set)、多重集合(multiset)、映射(map)、多重映射(multimap)
- 适配器容器:栈(stack)、队列(queue)、优先队列(priority_queue)
2.2算法(Algorithm)
算法是STL的另一个重要组件,提供了大量的通用算法,包括:
- 排序算法:sort、stable_sort、partial_sort等
- 查找算法:find、binary_search、lower_bound等
- 变序算法:reverse、rotate、random_shuffle等
- 数值算法:accumulate、inner_product、partial_sum等
2.3 迭代器(Iterator)
迭代器是STL的核心概念之一,提供了一种统一的访问容器元素的方法。STL中的迭代器分为五种类型:
- 输入迭代器(Input Iterator)
- 输出迭代器(Output Iterator)
- 前向迭代器(Forward Iterator)
- 双向迭代器(Bidirectional Iterator)
- 随机访问迭代器(Random Access Iterator)
2.4仿函数(Functor)
仿函数是一种可调用的对象,类似于函数指针,可以在算法中使用。STL中的函数对象用于指定特定的操作或比较规则,包括:
- 一元仿函数:接受一个参数
- 二元仿函数:接受两个参数
- 自定义仿函数:用户可以根据需要定义自己的仿函数
2.5配接器(Adapter)
配接器是一种特殊的容器,用于在不同的容器之间进行转换或包装。STL提供了多种适配器,如栈适配器(stack)、队列适配器(queue)和优先队列适配器(priority_queue),它们可以通过不同的容器实现相同的功能接口。
2.6配置器(Allocator)
配置器用于控制内存分配和释放的过程,可以在一定程度上优化内存管理效率。STL中的配置器允许用户自定义内存管理策略,满足特定的需求。
STL 六大组件的交互关系
Container
通过Allocator
取得数据储存空间,Algorithm
通过Iterator
存取Container
内容,Functor
可以协助Algorithm
完成不同的策略变化,Adapter
可以修饰或者套接Functor