您的位置:首页 > 编程语言

Part7 模板与泛型编程 Templates and Generic Programming

2016-07-06 23:17 423 查看
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提供的迭代器属于这一分类。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: