STL 迭代器

迭代器偏特化的意义

偏特化

偏特化就是对部分模板参数指定特定的类型。
如一个萃取迭代器所指类型的类:

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(定义域

猜你喜欢

转载自blog.csdn.net/u012630961/article/details/79698711
今日推荐