C++ 标准库:完整概述
C++ 标准库(C++ Standard Library)是一套强大的类、函数、宏和模板集合,随任何 C++ 编译器一起提供。它为大多数常见任务提供了现成的解决方案:从数据容器操作到网络通信和多线程。在本文中,我们将解析库的主要组件,展示代码示例,并解释如何有效利用其功能。
标准库的主要组件
标准库分为几个主要部分:
- STL(标准模板库)——容器、迭代器、算法和函数对象。
- 输入/输出——流(
iostream)、文件流(fstream)、字符串流(sstream)。 - 字符串——
std::string和std::string_view类。 - 数值运算——数学函数(
cmath)、随机数(random)、复数(complex)。 - 多线程——线程(
thread)、互斥锁、条件变量。 - 实用工具——
std::optional、std::variant、std::any、智能指针(shared_ptr、unique_ptr)。
STL 容器
容器是用于存储对象集合的模板类。它们分为序列式容器和关联式容器。
序列式容器
std::vector——动态数组。按索引快速访问,中间插入较慢。std::deque——双端队列。两端快速插入/删除。std::list——双向链表。任意位置快速插入/删除,但按索引访问较慢。
#include <iostream>#include <vector>
int main() { std::vector<int> numbers = {10, 20, 30, 40}; numbers.push_back(50); // 在末尾添加 for (int n : numbers) { std::cout << n << " "; } return 0;}关联式容器
std::set——唯一元素集合(已排序)。std::map——键值对字典(按键排序)。std::unordered_set/std::unordered_map——哈希表(未排序,但更快)。
#include <iostream>#include <map>
int main() { std::map<std::string, int> ages; ages["Alice"] = 30; ages["Bob"] = 25; for (const auto& [name, age] : ages) { std::cout << name << ": " << age << std::endl; } return 0;}算法
<algorithm> 库包含 100 多种用于序列操作的算法:排序、查找、复制、变换等。所有算法都通过迭代器工作,使其具有通用性。
#include <iostream>#include <algorithm>#include <vector>
int main() { std::vector<int> v = {5, 2, 8, 1, 9}; std::sort(v.begin(), v.end()); // 升序排序 auto it = std::find(v.begin(), v.end(), 8); if (it != v.end()) { std::cout << "找到: " << *it << std::endl; } return 0;}字符串操作
std::string 类提供了便捷的文本操作方法:查找、替换、拼接、比较。C++17 中添加了 std::string_view 用于非拥有式字符串视图。
#include