Part 2:迭代器 Iterator
泛化的指针,容器与算法的桥梁。提供一种方法,按照一定顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。既能对容器进行遍历,又可以对外隐藏容器的底层实现,从而以统一方式向算法传递数据。
作用:访问容器内的元素。
1、迭代器的类型
迭代器的类型
- 前向迭代器:
++ == != * -> =
- 双向迭代器:在前向迭代器的基础上,增加
--
- 随机访问迭代器:在双向迭代器的基础上,增加
+= -= < > <= >=
- 输入流迭代器:可读
++ == != * ->
- 输出流迭代器:可写
++ * =
不同迭代器对应的操作
2、traits
iterator_traits
萃取迭代器的特性。
value_type
:迭代器所指对象的类型difference_type
:两个迭代器之间的距离pointer
:迭代器所指向的型别reference
:迭代器所引用的型别iterator_catagory
type_traits
萃取型别特性。针对不同类型的属性,在编译器间完成函数派送的决定。
// 默认构造函数 __type_traits<T>::has_trivial_default_constructor // 拷贝构造函数 __type_traits<T>::has_trivial_copy_constructor // 赋值运算符 __type_traits<T>::has_trivial_assignment_operator // 析构函数 __type_traits<T>::has_trivial_destructor // 原始数据 __type_traits<T>::is_POD_type
返回结果是具有真假性质的对象,因为我们希望利用响应结果来进行参数推导,而编译器只有面对 class object 形式的参数才会做参数推导。
struct __true_type{}; // 真 struct __false_type{}; // 假
例:
template <class type> struct __type_traits { typedef __true_type has_trivial_default_constructor; typedef __false_type has_trivial_copy_constructor; typedef __false_type has_trivial_assignment_operator; typedef __false_type has_trivial_destructor; typedef __false_type is_POD_type; };