C++ 标准库 (STL) 概述
所有 C++ 库实体都在在一个或多个标准标头中声明或定义。 此实现包括 C++ 标准版不需要的两个额外标头:<hash_map>
和 <hash_set>
。 有关此实现支持的标头的完整列表,请参阅头文件参考。
C++ 标准版定义两种类型的符合标准的库:
- 托管实现,它支持 C++ ISO 标准所描述的所有必需的标准库标头。
- 独立实现,它仅需要标准库标头的一个子集。 所需的子集为:
独立标头子集 | ||
---|---|---|
<atomic> (至少声明 atomic_signed_lock_free 和 atomic_unsigned_lock_free ) |
<cstdint> |
<ranges> |
<bit> |
<cstdlib> (至少声明 abort 、atexit 、at_quick_exit 、exit 、quick_exit ) |
<ratio> |
<cfloat> |
<exception> |
<tuple> |
<climits> |
<functional> |
<typeinfo> |
<compare> |
<initializer_list> |
<source_location> |
<concepts> |
<iterator> |
<type_traits> |
<coroutine> |
<limits> |
<utility> |
<cstdarg> |
<memory> |
<version> |
<cstddef> |
<new> |
自 C++11 起,已弃用以下标头:<ciso646>
、<cstdalign>
和 <cstdbool>
。
独立实现和托管实现之间的其他差异包括:
- 托管实现需要一个名为
main
的全局函数。 独立实现可以定义其自己的启动和终止函数。 - 托管实现必须支持同时运行多个线程。 独立实现的实现器决定其库是否支持并发线程。
Microsoft C++ 标准库同时满足独立和托管要求。
C++ 库标头有两个更广泛的细分:
iostreams 约定。
本节包含以下部分:
有关 Visual C++ 运行时库的详细信息,请参阅 CRT 库功能。
注意
Microsoft 对 C++ 标准库的实现通常称为 STL 或标准模板库。 尽管 C++ 标准库是 ISO 14882 中定义的库的正式名称,但由于搜索引擎中常用“STL”和“标准模板库”,因此我们偶尔使用这些名称,以便更轻松地查找文档。 根据历史记录,“STL”最初是指 Alexander Stepanov 编写的标准模板库。 该库的一部分与 ISO C 运行时库、Boost 库的一部分和其他功能一起在 C++ 标准库中进行了标准化。 有时,“STL”还用于表示根据 Stepanov 的 STL 改编的 C++ 标准库的容器和算法部分。 在本文档中,标准模板库 (STL) 是指整个 C++ 标准库。