C++箴言:为类型信息使用特征类

C++箴言:为类型信息使用特征类,第1张

C++箴言:为类型信息使用特征类,第2张

STL主要由容器、迭代器和算法的模板组成,但也有几个实用工具模板。其中一个叫做前进。将指定的迭代器移动指定的距离:

template//move ITER d units
void advance(IterT & ITER,DistT d);//转发;如果d < 0,
//向后移动iter

概念上,advance只是在做iter += d,但advance做不到这一点,因为只有随机访问迭代器支持+=运算。不够强大的迭代器类型不得不反复利用++或- d次来实现进阶。

你不记得STL迭代器类别了吗?没问题,我们简单回顾一下。有五个迭代器对应于它们支持的操作。输入迭代器只能向前移动,一次一步,只能读取它们指向的内容,而且只能读取一次。它们基于输入文件中的读指针;C++库中的Istream_iterators就是这类的典型代表。输出迭代器是类似的,除了它们用于输出:它们只能向前移动,一次一步,并且只写它们所指向的内容,而且只能写一次。它们基于输出文件中的写指针;Ostream_iterators就是这种类型的典型代表。这是两个功能最弱的迭代器类别。因为输入输出迭代器只能向前移动,最多只能在指向的地方读或写一次,所以只适合一遍操作。

更强的迭代器范畴(iterator category)是前向迭代器(forward iterator)。这个迭代器可以做输入和输出迭代器能做的一切,另外它们可以不止一次地读取或写入它们所指向的内容。这使得它们可用于多遍操作。STL不提供单链表,但有些库提供(俗称slist),这类容器的迭代器是前向迭代器。TR1的散列容器的迭代器也可以属于forward类别。

双向迭代器(双向迭代器)增加了像正向迭代器一样向后移动的能力。STL列表的迭代器属于这一类,set、multiset、map和multimap的迭代器也是如此。

force的迭代器类别是随机访问迭代器。这个迭代器在双向迭代器上增加了“迭代器算术”(简称“迭代器算术”)的能力,也就是说,在恒定时间内向前或向后跳转任意距离。这个操作类似于指针操作,这并不奇怪,因为随机访问迭代器是基于内置指针的,内置指针可以有和随机访问迭代器一样的行为。vector、deque和string的迭代器是随机访问迭代器。

对于五个迭代器类别中的每一个,C++都有一个“标记结构”(“标记结构”)来在标准库中标识它:

struct input _ iterator _ tag { };

struct output _ iterator _ tag { };

struct forward _ iterator _ tag:public input _ iterator _ tag { };

struct bidirectional _ iterator _ tag:public forward _ iterator _ tag { };

struct random _ access _ iterator _ tag:public双向_ iterator _ tag { };

这些结构之间的继承关系是合法的is-a关系:所有的正向迭代器也是输入迭代器,以此类推,这是真的。我们很快就会看到这种继承的作用。

位律师回复
DABAN RP主题是一个优秀的主题,极致后台体验,无插件,集成会员系统
白度搜_经验知识百科全书 » C++箴言:为类型信息使用特征类

0条评论

发表评论

提供最优质的资源集合

立即查看 了解详情