迭代器偏特化的意义
偏特化
偏特化就是对部分模板参数指定特定的类型。
如一个萃取迭代器所指类型的类:
template<typename T> //输入的T是迭代器类型,其内部实现了value_type类型
struct iterator_traits{
typedef typename T::value_type value_type; //typename指示I::value_type中的value_type是一种类型
}
但是这个类无法萃取原生指针所指向的类型,在原生指针中并没有实现value_type。所以要使用偏特化版本
template<typename T> //输入的指向T的原生指针
struct iterator_traits<T *>{ //偏特化-迭代器是原生指针
typedef T value_type; //typename指示I::value_type中的value_type是一种类型
}
但是如果迭代器是const类型的原生指针呢,假设输入的是const int *指针,那上述的偏特化版本输入的T 实际上是const int,只能获得const int的结果,所以我们本来是一个补课更改的指针,却得到了一个不可更改的int数,这是不行的,故针对这种类型还要实现一个偏特化版本。
template<typename T> //输入的指向T的原生指针
struct iterator_traits<const T *>{ //偏特化-迭代器是原生指针
typedef T value_type; //typename指示I::value_type中的value_type是一种类型
}
迭代器的内嵌型别定义
如果要使类型迭代器可以有效运作,那么每一个迭代器必须默认实现内嵌型别定义,否则将会不兼容。
最常用的迭代器相应型别有5种:
- value type:迭代器所指对象的型别
- different type:两个迭代器之间的距离差,可以用来表示容器的最大容量
- T *偏特化版本用C++内建的ptrdiff_t(定义域