C++ 标准库 (STL):全面概述
C++ 标准库(常称为 STL——Standard Template Library)是一套强大的模板类和函数集合,是任何 C++ 编译器中不可或缺的组成部分。它为开发者提供了现成、经过验证且高效的解决方案,用于处理大多数日常任务:从数据集合操作到复杂算法以及输入输出。学习 STL 是掌握现代 C++ 的关键一步。
在本文中,我们将详细解析标准库的主要组件、它们的用途,并提供实际使用示例。
1. 容器 (Containers)
容器是用于存储对象集合的数据结构。所有容器都是模板类,因此可以存储任何类型的元素。
- 序列式容器:以线性顺序存储元素。
std::vector— 动态数组。通过索引快速访问,在末尾插入/删除为 O(1),在中间为 O(n)。std::list— 双向链表。在任何位置快速插入/删除,但无法直接通过索引访问。std::deque— 双端队列。在开头和末尾均可快速插入/删除。std::array— 固定大小的静态数组 (C++11)。
- 关联式容器:以排序顺序存储元素(通常基于红黑树)。
std::set— 唯一元素的集合。std::map— 键值对字典(关联数组)。std::multiset/std::multimap— 允许重复键的类似容器。
- 无序关联式容器 (C++11):使用哈希表。
std::unordered_set,std::unordered_map— 平均 O(1) 的快速访问。
- 容器适配器:基于另一个容器提供受限接口。
std::stack(LIFO),std::queue(FIFO),std::priority_queue(优先级队列)。
std::vector 使用示例:
#include <iostream>#include <vector>
int main() { std::vector<int> numbers = {10, 20, 30, 40, 50}; numbers.push_back(60); // 在末尾添加元素 for (int n : numbers) { std::cout << n << " "; } // 输出:10 20 30 40 50 60 return 0;}2. 迭代器 (Iterators)
迭代器是泛化的指针,允许以统一的方式遍历任何容器的元素。它们是连接容器和算法的桥梁。
- 迭代器类别:输入迭代器、输出迭代器、前向迭代器、双向迭代器、随机访问迭代器。
begin()/end()— 返回指向第一个元素和最后一个元素之后位置的迭代器。std::advance()— 将迭代器移动 N 个位置。std::distance()— 计算两个迭代器之间的距离。
迭代器示例:
#include <iostream>#include <vector>
int main() { std::vector<std::string> words = {"Hello", "World", "C++"}; for (auto it = words.begin(); it != words.end(); ++it) { std::cout << *it << " "; } // 输出:Hello World C++ return 0;}