如何使用 STL 文档
本网站记录了 SGI 标准模板库中的所有组件(类、函数和概念)。每个页面描述一个组件,并包含指向相关组件的链接。
本文档假定您对 C++ 有基本的了解,特别是 C++ 模板。此外,您应该阅读 标准模板库简介,然后再继续查看描述单个组件的页面:介绍性页面定义了贯穿整个文档使用的几个术语。
STL 组件的分类
STL 组件根据功能分为六大类:容器、迭代器、算法、函数对象、工具和分配器;这些类别在 简介 中定义,目录 也是根据它们组织的。
STL 文档包含两个索引。其中一个是 主索引,它按字母顺序列出了所有组件。另一个是 分隔索引,它为每个类别包含一个单独的字母顺序列表。分隔索引包含一个目录中没有的类别:适配器。适配器是将一个接口转换为另一个接口的类或函数。适配器没有出现在目录中的原因是,没有组件仅仅是适配器,而始终是适配器和其他的东西;堆栈例如,是一个容器和一个适配器。因此,堆栈出现在分隔索引的两个不同位置。还有几个其他组件在分隔索引中出现不止一次。
STL 文档以两种方式对组件进行分类。
- 类别 是按功能进行分类。类别是
- 组件类型 是一种结构性分类:基于组件是哪种类型的 C++ 实体(如果有)。组件类型是
- 类型(即 一个结构或类)
- 函数
- 概念(如 简介 中定义)。
这两种分类方案是独立的,并且每种方案都适用于每个 STL 组件;向量例如,是一个类别为容器的类型,而 前向迭代器 是一个类别为迭代器的概念。
这两种分类方案都出现在记录 STL 组件的每个页面的顶部。左上角标识组件的类别为容器、迭代器、算法、函数对象、工具、适配器或分配器,右上角标识组件为类型、函数或概念。
使用 STL 文档
STL 是一个泛型库:几乎每个类和函数都是一个模板。因此,STL 文档最重要的目的之一是清楚地描述哪些类型可用于实例化这些模板。如 简介 中所述,概念 是一个泛型的一组要求,类型必须满足这些要求:如果类型满足所有概念的要求,则称该类型是概念的模型。
概念在 STL 文档中被大量使用,因为它们直接表达类型要求,并且因为它们是概念性组织类型的工具。(例如,输出流迭代器和插入迭代器都是 输出迭代器 的模型这一事实是关于这两个类共同点的重要陈述。)概念用于记录类型和函数。
概念页面的格式
记录概念的页面包含以下部分。
-
摘要:对概念目的的描述。
-
细化:一个列表,列出此概念细化的其他概念,并包含指向这些概念的链接。
-
关联类型:概念是对某种类型的一组要求。但是,通常这些要求中的一些涉及其他类型。例如, 一元函数 的要求之一是, 一元函数 必须具有参数类型;如果F是模型 一元函数 的类型,并且f是类型为F的对象,那么在表达式f(x), x必须是F的参数类型。如果概念确实有任何此类关联类型,则在本章节中定义它们。
-
符号:接下来的三部分,定义、有效表达式和表达式语义,展示了涉及模型正在定义的概念的类型的表达式。本章节定义了这些表达式中使用的变量和标识符的含义。
-
定义:一些概念,例如 小于可比较,使用专门的术语。如果概念需要任何此类术语,则在本节中定义。
-
有效表达式:模型某个概念的类型需要支持某些操作。在大多数情况下,用特定函数或成员函数来描述这一点没有意义:例如,使用全局函数还是成员函数来提供,对模型 输入迭代器 的类型没有区别运算符 ++. 本节列出了模型此概念的类型必须支持的表达式。它包括对表达式操作数类型(如果有)和表达式返回类型(如果有)的任何特殊要求。
-
表达式语义:前一部分,有效表达式,列出了必须支持哪些涉及类型的表达式;但是,它没有定义这些表达式的含义。本章节做到了:它列出了上一部分定义的表达式的语义、先决条件和后置条件。
-
复杂度保证:在某些情况下,某些操作的运行时复杂度是概念要求的重要部分。例如, 双向迭代器 和 随机访问迭代器 之间的最显著区别之一是,对于随机访问迭代器,诸如p + n之类的表达式花费常数时间。本节列出了对运行时复杂度的任何此类要求。
-
不变量:许多概念要求某些属性始终适用于模型正在定义的概念的类型的对象。例如, 小于可比较 强加了传递性的要求:如果x < y和y < z,那么x < z. 某些此类属性是“公理”(即,它们独立于任何其他要求),而另一些是“定理”(即,它们来自表达式语义部分的要求或不变量部分中的其他要求)。
-
模型:此概念的类型的示例列表。请注意,此列表并非旨在完整:在大多数情况下,完整的列表是不可能的,因为可以模型该概念的类型数量是无限的。
-
注释:页面其他部分引用的脚注(如果有)。
-
另请参阅:指向其他相关页面的链接。
类型页面的格式
记录类型的页面包含以下部分。
-
描述. 类型属性的摘要。
-
使用示例:涉及该类型的代码片段。
-
定义:指向定义类型的源代码的链接。
-
模板参数:几乎所有 STL 结构和类都是模板。本章节列出每个模板参数的名称、目的和默认值(如果有)。
-
模型:此类型是其模型的概念列表,以及指向这些概念的链接。请注意,一个类型可能是一个以上概念的模型向量例如,是 随机访问容器 和 后插入序列 的模型。如果一个类型是两个不同概念的模型,则仅表示它满足了这两个概念的要求。
-
类型要求:类模板的模板参数通常必须满足一组要求。其中许多可以通过列出模板参数必须符合哪个概念来简单地表达,但是一些类型要求稍微复杂一些,并且涉及两个不同模板参数之间的关系。
-
公共基类:如果此类继承自任何其他类,则在本节中列出它们。
-
成员:此类型嵌套类型、成员函数、成员变量和关联非成员函数的列表。在大多数情况下,这些成员只是列出,而不是定义:由于该类型是某个概念的模型,因此通常不需要详细定义。例如,向量是 容器 的模型,因此 容器 页面中成员函数begin()的描述适用于向量,并且不需要在向量页面中重复。相反,成员部分提供每个成员的简要描述以及指向更完整地定义该成员的任何页面的链接。
-
新成员:一个类型可能具有一些不属于其模型的任何概念的要求的成员。例如,向量 具有名为capacity()的成员函数,它不是 随机访问容器 或 后插入序列 要求的一部分。这些成员在新成员部分中定义。
-
注释:页面其他部分引用的脚注(如果有)。
-
另请参阅:指向其他相关页面的链接。
函数页面的格式
记录函数的页面包含以下部分。
-
原型:函数的声明。
-
描述:对函数作用的摘要。
-
定义:指向定义函数的源代码的链接。
-
类型要求:STL 中的大多数函数都是函数模板。本章节列出函数模板参数必须满足的要求。有时,这些要求可以通过列出模板参数必须符合哪个概念来简单地表达,但有时它们更复杂,并且涉及两个不同模板参数之间的关系。在查找的情况下,例如,要求是参数输入迭代器是 输入迭代器 的模型,参数相等可比较是 相等可比较 的模型,并且在类型为相等可比较的对象和输入迭代器的值类型的对象之间可以进行相等比较。
-
先决条件:函数通常不保证对任何可能的输入都能产生一个定义良好的结果,而只保证对有效输入产生结果;使用无效输入调用函数是错误的。本章节描述了有效性的条件。
-
复杂度: 关于函数运行时复杂度的保证。例如,查找的运行时复杂度与输入范围的长度成线性关系。
-
使用示例: 一个展示如何使用该函数的代码片段。
-
注释:页面其他部分引用的脚注(如果有)。
-
另请参阅:指向其他相关页面的链接。
版权所有 © 1999 Silicon Graphics, Inc. 保留所有权利。
商标信息