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提供的迭代器属于这一分类。
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提供的迭代器属于这一分类。
相关文章推荐
- vc++6 Platform SDK February 2003
- 五子棋算法判断输赢
- java SE7 概要图
- JAVA ——华为
- Java使用数组
- lua语言中十六进制字符串转换为二进制字符串的方法
- java中求两个数的最小公倍数,最大公约数的简便方法
- Matlab: num与date的格式转换
- Spring的代理方式
- AOP编程之前置通知
- 从.c文件到可执行文件的四个阶段
- java Thread方法解析: sleep join wait notify notifyAll
- windows编程之应用层的线程同步
- github中Repository上传代码
- 学习笔记-Java中的xml文件读取之SAX解析
- Struts(六)
- C++ 中cin 输入流的多种函数用法
- Operators and special characters in matlab
- C++ 11可变参数接口设计在模板编程中应用的一点点总结
- C++面试笔记(一)