11.1标准模板库简介 STL也使容器提供接口。许多基本操作是所 有容器都峾用的。而有些操作则适用于类似容 器的子集。可以用新的类来扩展STL。参见表 11.2。这些函数和运算符可通称为容器的接口。 各容器具体接口参见附录C 使用ST容器或容器适配器。要包含定义 该容器模板类头文件。参见表11.3。这些头文 件的内容部在std字空间域( namespace/std 中,程序中必须加以说明
11.1 标准模板库简介 STL也使容器提供接口。许多基本操作是所 有容器都适用的,而有些操作则适用于类似容 器的子集。可以用新的类来扩展STL。参见表 11.2。这些函数和运算符可通称为容器的接口。 各容器具体接口参见附录C。 使用STL容器或容器适配器,要包含定义 该容器模板类头文件。参见表11.3。这些头文 件的内容都在std名字空间域(namespace std) 中,程序中必须加以说明
111标准模板库简介回 在有关数组、链表和二叉树等线性表和非线性表的讨论中, 若要访问其中一个元素(结点),我们可以用下标或者指针去访 问,而下标实际上也是一种指针即地址,访问时取地址的方式还 有很多,一系列的访问方法都可以抽象为迭代子( iterator)。访 问方法最终要归于内存地址的获得,所以说 迭代子与指针有许多相同之处,但代子保存所操作 从而实现与每种容器类型相适应的迭代子 而且有些迭代子操作在所有容器中是一致的,如++运算符总是返 回容器下一个元素的迭代子,间接引用符“*”,总是表示迭代子 指向的容器元素。 迭代子用来将STL的各部分结合在一起。从本质上说,STL提 供的所有算法都是模板,我们可以通过使用自己指定的迭代子来 对这些模板实例化。迭代子可以包括指针,但又不仅是一个指针
11.1 标准模板库简介 在有关数组、链表和二叉树等线性表和非线性表的讨论中, 若要访问其中一个元素(结点),我们可以用下标或者指针去访 问,而下标实际上也是一种指针即地址,访问时取地址的方式还 有很多,一系列的访问方法都可以抽象为迭代子(iterator)。访 问方法最终要归于内存地址的获得,所以说迭代子是面向对象版 本的指针。 迭代子与指针有许多相同之处,但迭代子保存所操作的特定 容器需要的状态信息,从而实现与每种容器类型相适应的迭代子。 而且有些迭代子操作在所有容器中是一致的,如++运算符总是返 回容器下一个元素的迭代子,间接引用符“*”,总是表示迭代子 指向的容器元素。 迭代子用来将STL的各部分结合在一起。从本质上说,STL提 供的所有算法都是模板,我们可以通过使用自己指定的迭代子来 对这些模板实例化。迭代子可以包括指针,但又不仅是一个指针
11.1标准模板库简介 sTL最大的优点是提供能在各种容器中通用的算法,例如插入 删除、查找、排序等等。 STL提供70种左右的标准算法。算法只是间接通过迭代子操作 容器元素。 算法通常返回迭代子。一个算法通常可用于多个不同的容器, 所以称为泛型算法( generic algorithm)。 算法分为: 1.修改容器的算法,即变化序列算法( mutating-sequence algorithn),如 copy、 remove()、 replace(、 swapo等 2.不修改容器的算法,即非变化序列算法(non- mutating sequence algorithm),如 counto、 findo等。 3.数字型算法
11.1 标准模板库简介 STL最大的优点是提供能在各种容器中通用的算法,例如插入、 删除、查找、排序等等。 STL提供70种左右的标准算法。算法只是间接通过迭代子操作 容器元素。 算法通常返回迭代子。一个算法通常可用于多个不同的容器, 所以称为泛型算法(generic algorithm)。 算法分为: 1.修改容器的算法,即变化序列算法(mutating-sequence algorithm),如copy()、remove()、replace()、swap()等。 2.不修改容器的算法,即非变化序列算法(non-mutatingsequence algorithm),如count()、find()等。 3.数字型算法
11.2选代子类 C++标准库中有五种预定义迭代子,其功能最强最 灵活的是随机访问迭代子。 标准库定义迭代子类型 说明 输入( Inputiterator) 从容器中读取元素。输入迭代子只能一次一个元素地向前移动 (即从容器开头到容器末尾)。要重读必须从头开始 输出( OutputIterator) 向容器写入元素。输出迭代子只能一次一个元素地向前移动。 输出迭代子要重写,必须从头开始。 正向( ForwardIterator) 组合输入迭代子和输出迭代子的功能,并保留在容器中的位置 (作为状态信息),所以重新读写不必从头开始 双向( BidirectionalIterator)组合正向迭代子功能与逆向移动功能(即从容器序列末尾到容 器序列开头) 随机访问 组合双向迭代子的功能,并能直接访问容器中的任意元素,即 RandomAccessiterator 可向前或向后跳过任意个元素。 表114迭代子类别 四P四
11.2 迭代子类 C++标准库中有五种预定义迭代子,其功能最强最 灵活的是随机访问迭代子。 标准库定义迭代子类型 说明 输入(InputIterator) 输出(OutputIterator) 正向(ForwardIterator) 双向(BidirectionalIterator) 随机访问 (RandomAccessIterator) 从容器中读取元素。输入迭代子只能一次一个元素地向前移动 (即从容器开头到容器末尾)。要重读必须从头开始。 向容器写入元素。输出迭代子只能一次一个元素地向前移动。 输出迭代子要重写,必须从头开始。 组合输入迭代子和输出迭代子的功能,并保留在容器中的位置 (作为状态信息),所以重新读写不必从头开始。 组合正向迭代子功能与逆向移动功能(即从容器序列末尾到容 器序列开头)。 组合双向迭代子的功能,并能直接访问容器中的任意元素,即 可向前或向后跳过任意个元素。 表11.4 迭代子类别
11.2选代子类 标准库定义迭代子的层次结构,按这个层次,从上到 下,功能越来越强。但不是继承! Input output forward bidirectional random access 图111迭代子层次
11.2 迭代子类 标准库定义迭代子的层次结构,按这个层次,从上到 下,功能越来越强。但不是继承! input output forward bidirectional random access 图11.1 迭代子层次