一,STL基本概念
C++ 标准模板库(Standard Template Library,STL)是一套功能强大的 C++ 模板类和函数的集合,它提供了一系列通用的、可复用的算法和数据结构。
STL 的设计基于泛型编程,这意味着使用模板可以编写出独立于任何特定数据类型的代码。
STL广义上分为容器(Containers)、迭代器(Iterators)、算法(Algorithms)
1.使用 STL 的好处:
- 代码复用:STL 提供了大量的通用数据结构和算法,可以减少重复编写代码的工作。
- 性能优化:STL 中的算法和数据结构都经过了优化,以提供最佳的性能。
- 泛型编程:使用模板,STL 支持泛型编程,使得算法和数据结构可以适用于任何数据类型。
- 易于维护:STL 的设计使得代码更加模块化,易于阅读和维护。
2.STL六大组件
STL大体上分为六大组件:容器、迭代器、算法、仿函数、空间配置器和适配器
1.容器:各种结构,如向量(vector)、链表(list)、队列(queue)、栈(stack)、集合(set)、映射(map)等,用来存放数据。
2.算法:各种常用的算法,如sot。fnd.copy、for_each等,用于对容器中的元素进行各种操作,包括排序、搜索、复制、移动、变换等。
3.送代器:扮演了容器与算法之间的胶合剂。用于遍历容器中的元素,允许以统一的方式访问容器中的元素,而不用关心容器的内部实现细节。
4.仿函数:行为类似函数,可作为算法的某种策略。
5.适配器:一种用来修饰容器或者仿函数或迭代器接口的东西。
6.空间配置器:负责空间的配置与管理。
二,C++标准库
C++ 标准库是 C++ 语言的一部分,它包含了一系列的类和函数,用于处理常见的编程任务,如输入输出、字符串操作、数学计算、容器管理等。
标准库的设计目标是提供高效、可移植和易于使用的工具,以帮助开发者快速构建应用程序。
导入标准库头文件:
在 C++ 中,我们使用 #include
预处理指令来导入标准库头文件。#include
指令告诉编译器在编译时将指定的头文件内容插入到当前文件中,头文件通常包含函数声明、类定义、宏定义等内容。
语法:
例如下面的示例中,我们导入了三个常用的标准库头文件:
<iostream>
:提供了输入输出流的功能,如std::cout
和std::cin
。<vector>
:提供了向量容器的实现,用于存储动态数组。<cmath>
:提供了常用的数学函数,如sqrt()
、sin()
、cos()
等。
#include <iostream> // 导入输入输出流库
#include <vector> // 导入向量容器库
#include <cmath> // 导入数学函数库
2.标准库组件
以下是 C++ 标准库的主要组件分类及对应的头文件列表:
输入输出
-
<iostream>:标准输入输出流
-
<fstream>:文件输入输出流
-
<sstream>:字符串流
-
<iomanip>:输入输出流格式化
容器
-
<array>:定长数组容器
-
<vector>:动态数组容器
-
<deque>:定长数组容器
-
<list>:双向链表容器
-
<forward_list>:单向链表容器
-
<stack>:栈容器适配器
-
<queue>:队列容器适配器
-
<priority_queue>:优先队列容器适配器
-
<set>:集合容器适配器
-
<unordered_set>:无序集合容器(基于哈希表)
-
<map>:映射容器(基于平衡二叉树)
-
<unnordered_map>:无序映射容器(基于哈希表)
-
<bitset>:二进制位容器
算法和迭代器
- <algorithm>:常用算法(如排序,查找)
- <iterator>:迭代器
函数对象和绑定
- <functional>:定义函数对象及相关工具
数学和数值运算
- <numeric>:数值操作
- <complex>:复数运算
- <valarray>:数组类及相关操作
- <cmath>:数学函数
字符串和正则表达式
- <string>:标准字符串类
- <regex>:正则表达式
时间和日期
- <ctime>:时间处理
- <chrono>:时间库
多线程和并发
- <thread>:多线程支持
- <mutex>:互斥量
- <condition_variable>:条件变量
- <future>:异步编程支持
-
<atomic>:原子操作
内存管理
- <memory>:智能指针及动态内存管理
- <new>:动态内存分配
类型特性和运行时类型识别
- <type_traits>:类型特性
- <typeinfo>:运行时类型识别
异常处理
- <exception>:异常处理基类及相关工具
- <stdexcept>:常用异常类
输入输出操作
- <cstdio>:C风格输入输出
- <cstdint>:顶长整数类型
其他工具
-
<random>
: 随机数生成 -
<locale>
: 本地化支持 -
<codecvt>
: 字符编码转换 -
<cassert>
: 断言 -
<cctype>
: 字符处理 -
<cstring>
: 字符串处理 -
<cwchar>
: 宽字符处理 -
<climits>
: 数值极限 -
<cfloat>: 浮点极限
-
<cstdlib>
: 常用工具(如std::rand
和std::abs
等)