C++ 标准库
C++ 标准库概述
Section titled “C++ 标准库概述”C++ 标准库(C++ Standard Library)是一个功能强大的预编写类和函数集合,通过为常见的编程任务提供即用组件,显著简化了开发过程。
它可以大致分为几个关键领域:
1. 标准模板库 (STL)
Section titled “1. 标准模板库 (STL)”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):一个非拥有、轻量级的字符序列视图。用于高效传递字符串数据而无需复制。
4. 工具库(Utilities Library)
Section titled “4. 工具库(Utilities Library)”各种实用组件的集合:
<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>)。
8. 语言支持(Language Support)
Section titled “8. 语言支持(Language Support)”包含基本的语言特性,如类型支持(<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 声明/指令)。