STL(标准模板库)是什么
标准模板库(Standard Tem plate Library,STL)是所有 C++ 编译器和操作系统平台都支持的一种模板库。STL 提供了大量的复用软件组织,能让 C++ 程序设计者快速而高效地进行开发。本文主要对 STL 的组成进行讲解。
STL 主要由六个部分组成:空间配置器(Allocator)、适配器(Adapters)、容器(Containers)、迭代器(Iterator)、仿函数(Functors)和算法(Algorithm)。
STL 的一个基本理念就是将数据和操作分离,数据由容器加以管理,操作则由可定制的算法完成,迭代器在两者之间充当“黏合剂”。
STL 的组件结构图如图1 所示。

图1 STL组件结构图
图1 展示了 STL 各组件之间的关系,STL 中的每个组件都有其特定功能,组件之间又密切关联。下面分别对每个组件进行简单介绍。
当容器失效时,容器中的元素也会失效。容器本身包含了处理这些数据的方法。STL中的容器共有 13 种,如表 1 所示。
空间配置器本质上是对
容器适配器采用特定的数据管理策略,能够使容器在操作数据时表现出另一种行为。例如,使用容器适配器
STL提供了三个容器适配器:stack(栈)、queue(队列)和 priority_queue(优先队列)。适配器体现了 STL 设计的通用性,极大提高了编程效率。
迭代器将容器与算法联系起来,起到了“黏合剂”的作用,STL 提供的算法几乎都通过迭代器实现元素访问。
STL提供了输入迭代器、输出迭代器、正向迭代器、双向迭代器和随机访问迭代器五种类型的迭代器,使用迭代器访问容器元素更简单、易用,且代码更加紧凑、简洁。
仿函数也称为函数对象,是 STL 很重要的组成部分,它使 STL 的应用更加灵活方便,增强了算法的通用性。
大多数 STL 算法可以使用一个仿函数作为参数,以达到某种数据操作的目的。例如,在排序算法中,可以使用仿函数 less 或 greater 作为参数,以实现数据从大到小或从小到大的排序。
STL 算法不依赖于容器的实现细节,只要容器的迭代器符合算法要求,算法就可以通过迭代器处理容器中的元素。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。
STL组成
STL 是惠普实验室开发的一系列标准化组件的统称。它是由 Alexander Stepanov、M eng Lee 和 David R.M usser 在惠普实验室工作时开发出来的。在1994 年,STL 被纳入 C++ 标准,成为 C++ 库的重要组成部分。STL 主要由六个部分组成:空间配置器(Allocator)、适配器(Adapters)、容器(Containers)、迭代器(Iterator)、仿函数(Functors)和算法(Algorithm)。
STL 的一个基本理念就是将数据和操作分离,数据由容器加以管理,操作则由可定制的算法完成,迭代器在两者之间充当“黏合剂”。
STL 的组件结构图如图1 所示。

图1 STL组件结构图
1) 容器
容器是存储其他对象的对象,它存储的对象可以是自定义数据类型的对象,也可以是内置数据类型的对象。这些被存储的对象必须是同一种数据类型,它们归容器所有,称为容器的元素。当容器失效时,容器中的元素也会失效。容器本身包含了处理这些数据的方法。STL中的容器共有 13 种,如表 1 所示。
序列容器 | 关联容器 | 无序容器 |
---|---|---|
vector | set | unordered_set (C++11) |
list | multiset | unordered_ multiset(C++11) |
deque | map | multiset_ map(C++11) |
array(C++11) | multimap | unordered_ multimap(C++11) |
forward_list(C++11) |
2) 空间配置器
C++ 标准库采用了空间配置器实现对象内存空间的分配和归还,空间配置器是特殊的内存模型。例如,使用vector
容器,存储数据的空间由空间配置器完成内存的分配和资源回收。空间配置器本质上是对
new
和 delete
运算符再次封装而成的类模板,对外提供可用的接口,实现内存资源的自动化管理。3) 适配器
适配器主要指容器适配器。容器适配器也是一类容器,它除了能存储普通数据,还可以存储 list、vector、deque 等容器。容器适配器采用特定的数据管理策略,能够使容器在操作数据时表现出另一种行为。例如,使用容器适配器
stack
封装一个vector<int>
容器,使vector<int> 容器在处理数据时,表现出栈这种数据结构的特点(先进后出)。STL提供了三个容器适配器:stack(栈)、queue(队列)和 priority_queue(优先队列)。适配器体现了 STL 设计的通用性,极大提高了编程效率。
4) 迭代器
迭代器是STL提供的用于操作容器中元素的类模板,STL 算法利用迭代器遍历容器中的元素,迭代器本身也提供了操作容器元素的方法,使容器元素访问更便捷。迭代器将容器与算法联系起来,起到了“黏合剂”的作用,STL 提供的算法几乎都通过迭代器实现元素访问。
STL提供了输入迭代器、输出迭代器、正向迭代器、双向迭代器和随机访问迭代器五种类型的迭代器,使用迭代器访问容器元素更简单、易用,且代码更加紧凑、简洁。
5) 仿函数
我们知道仿函数,仿函数通过重载 () 运算符实现,使类具有函数一样的行为。仿函数也称为函数对象,是 STL 很重要的组成部分,它使 STL 的应用更加灵活方便,增强了算法的通用性。
大多数 STL 算法可以使用一个仿函数作为参数,以达到某种数据操作的目的。例如,在排序算法中,可以使用仿函数 less 或 greater 作为参数,以实现数据从大到小或从小到大的排序。
6) 算法
算法是 STL 定义的一系列函数模板,是 STL 非常重要的一部分内容。算法可以对容器中的元素施加特定操作。STL 算法不依赖于容器的实现细节,只要容器的迭代器符合算法要求,算法就可以通过迭代器处理容器中的元素。
声明:《C++系列教程》为本站“54笨鸟”官方原创,由国家机构和地方版权局所签发的权威证书所保护。