• Rule47:请使用traits classes表现类型信息
    Use traits classes for information about types.

STL 主要由“用以表现容器、迭代器和算法”的templates构成,也覆盖了若干工具性templates,其中一个名为advance,用来将某个迭代器移动某个给定距离。
观念上advance只是做iter+=d动作,但是不可以全然那么做,因为只有random access迭代器才支持+=操作,面对其他迭代器种类,advance必须反复施行++或–,共d次。

5种STL迭代器分类
input迭代器只能向前移动,一次一步,客户只可读取(不能涂写)他们所指的东西,而且只能读取一次,他们模仿指向输入文件的阅读指针(read pointer);C++程序库中的istream_iterators是这一分类的代表。
output迭代器情况类似,但一切只为输出,它们只向前移动,一次一步,客户只可涂写他们所指的东西,而且只能涂写一次,他们模仿指向输出文件的涂写指针(write pointer);ostream_iterators是这一分类的代表。这是威力最小的两个迭代器分类。由于这两类都只能向前移动,而且只能读或者写其所指物最多一次,所以它们只适合“一次性操作算法”
forward迭代器可以做前述两种分类所能做的每一件事,而且可以读或写其所指物一次以上。STL并未提供单向linked list,但某些程序库提供了该数据结构,而指入这种容器的迭代器就是属于forward迭代器。
BiDirectional迭代器除了可以向前移动,还可以向后移动。STL的list迭代器就属于这一分类,set,multiset,map和mutimap的迭代器就是这一部分。
random access迭代器可以执行“迭代器算术”,也就是它可以在常量时间内向前或向后跳跃任意距离。vector,deque和string提供的迭代器属于这一分类。

Logo

权威|前沿|技术|干货|国内首个API全生命周期开发者社区

更多推荐