Skip to content

C++ 标准库

C++ 标准库(C++ Standard Library)是一个功能强大的预编写类和函数集合,通过为常见的编程任务提供即用组件,显著简化了开发过程。

它可以大致分为几个关键领域:

C++ 标准库的核心。它提供了基于 C++ 模板的通用、高效和可重用组件。STL 主要包括:

  • 容器(Containers): 管理对象集合的类。示例包括:
  • 顺序容器(Sequence Containers): std::vector (动态数组), std::deque (双端队列), std::list (双向链表), std::forward_list (单向链表, C++11), std::array (固定大小数组, C++11)。
  • 关联容器(Associative Containers): std::set (已排序的唯一键集合), std::map (已排序的键值对集合), std::multiset (已排序的非唯一键集合), std::multimap (已排序的非唯一键值对集合)。
  • 无序关联容器(Unordered Associative Containers) (哈希表, C++11):std::unordered_set, std::unordered_map, std::unordered_multiset, std::unordered_multimap。
  • 容器适配器(Container Adapters): std::stack, std::queue, std::priority_queue (在其他容器基础上提供特定接口)。
  • 算法(Algorithms): 对元素序列执行操作的函数,通常由容器提供。示例:搜索 (std::find), 排序 (std::sort), 修改 (std::transform), 计数 (std::count), 数值操作 (std::accumulate)。主要位于 <algorithm> 和 <numeric> 头文件中。
  • 迭代器(Iterators): 类似于指针的对象,提供了一种按顺序访问容器(及其他序列)中元素的方式。它们连接算法和容器。
  • 函数对象(Function Objects,也称 Functors)与 Lambda 表达式: 可以像函数一样被调用的对象(通过重载 operator())。广泛用于算法。C++11 的 Lambda 表达式提供了一种简洁的方式来在线创建匿名函数对象。

2. 输入/输出流库 (<iostream>, <fstream>, <sstream>)

Section titled “2. 输入/输出流库 (<iostream>, <fstream>, <sstream>)”

提供处理输入和输出操作的类:

  • std::cin:标准输入流(通常是键盘)。
  • std::cout:标准输出流(通常是控制台)。
  • std::cerr:标准错误流(无缓冲)。
  • std::clog:标准错误流(有缓冲)。
  • std::ifstream:输入文件流。
  • std::ofstream:输出文件流。
  • std::fstream:用于输入和输出的文件流。
  • std::istringstream:输入字符串流(从字符串读取)。
  • std::ostringstream:输出字符串流(写入字符串)。
  • std::stringstream:用于输入和输出的字符串流。

3. 字符串处理 (<string>, <string_view>)

Section titled “3. 字符串处理 (<string>, <string_view>)”

提供处理字符序列的类:

  • std::string:一个提供众多操作函数的动态字符字符串类。
  • std::string_view (C++17):一个非拥有、轻量级的字符序列视图。用于高效传递字符串数据而无需复制。

各种实用组件的集合:

  • <utility>:包含 std::pair, std::move, std::forward, 比较运算符。
  • <memory>:智能指针 (std::unique_ptr, std::shared_ptr, std::weak_ptr), 分配器(allocators)。
  • <functional>:函数包装器 (std::function), 函数对象, std::bind。
  • <chrono> (C++11):日期和时间工具。
  • <tuple> (C++11):固定大小的异构值集合。
  • <optional> (C++17):表示一个可选的包含值。
  • <variant> (C++17):类型安全的联合体(union)。
  • <any> (C++17):任何类型的单个值的类型安全容器。
  • <type_traits> (C++11):编译时类型信息查询和操作。

5. 数值库(Numerics Library) (<cmath>, <complex>, <random>, <numeric>)

Section titled “5. 数值库(Numerics Library) (<cmath>, <complex>, <random>, <numeric>)”

提供数学函数、复数、随机数生成和数值算法。

  • <cmath>:C 风格的数学函数(sin, cos, sqrt 等)。
  • <complex>:复数类模板。
  • <random> (C++11):高级随机数生成工具。
  • <numeric>:数值算法,如 accumulate, inner_product。

6. 并发支持库(Concurrency Support Library)(C++11 及更高版本)

Section titled “6. 并发支持库(Concurrency Support Library)(C++11 及更高版本)”

提供多线程编程工具:

  • <thread>:用于启动和管理线程的类。
  • <mutex>:用于保护共享数据的互斥锁(mutexes)(std::mutex, std::recursive_mutex 等)。
  • <shared_mutex> (C++14):共享(读写)互斥锁。
  • <condition_variable>:用于线程同步的条件变量(condition variables)。
  • <atomic>:用于无锁编程的原子类型(atomic types)。
  • <future>, <promise>:用于异步操作的工具。

7. 文件系统库(Filesystem Library) (C++17)

Section titled “7. 文件系统库(Filesystem Library) (C++17)”

提供用于以平台无关方式操作文件和目录的类和函数(<filesystem>)。

包含基本的语言特性,如类型支持(<limits>, <typeinfo>)、异常处理(<exception>)和动态内存管理(<new>)。

9. C 标准库集成(C Standard Library Integration)

Section titled “9. C 标准库集成(C Standard Library Integration)”

C++ 标准库包含了 C 标准库的功能。可以使用 <stdio.h>, <stdlib.h>, <string.h>, <math.h> 等 C 语言头文件,但首选的 C++ 方式是使用对应的 <cHEADER> 版本(例如 <cstdio>, <cstdlib>, <cstring>, <cmath>),这些版本将 C 库函数放置在 std 命名空间中。

使用库功能需要包含相应的头文件(例如 #include <vector>),并且通常使用 std 命名空间(例如 std::vector<int> myVector; 或使用 using 声明/指令)。