STL 型别技术

来源:互联网 发布:安卓博德之门2修改数据 编辑:程序博客网 时间:2024/05/01 20:35

STL设计将容器和算法分开,迭代器是两者的胶贴剂,STL 型别技术用于迭代器和算法之间,型别技术的实现是用Traits技法;

template <class Iterator>struct  iterator_traits{typedef typename Iterator::iterator_category  iterator_category;typedef typename Iterator::value_type      value_type;typedef typename Iterator::difference_type    difference_type;typedef typename Iterator::pointer      pointer;typedef typename Iterator::referece      referece;};template <class T>struct  iterator_traits<T*>{typedef random_access_iterator_tagiterator_category;typedef T  value_type;typedef ptrdiff_t         difference_type;typedef T* pointer;typedef T& referece;};template <class T>struct  iterator_traits<const T*>{typedef random_access_iterator_tagiterator_category;typedef T value_type;typedef ptrdiff_t        difference_type;typedef T*pointer;typedef T&referece;};


itreator traits 是特性萃取机,萃取的是迭代器的型别,迭代器中会定义iterator_category , value_type , different_type , pointer  和 reference,如果T是原生指针的话就另当别论,这个特性萃取机会使用在算法中,其中要提到的iterator_catetory,是要指明迭代器的类型,迭代器分为五类:

Input  Iterator :  该类迭代器所指对象,是只读的 read only;

Output Iterator : 只写 write only;

Forward Iterator : 允许写入型算法在此种迭代器所形成的区间上进行读写操作;

Bidirectional Iterator : 可双向移动;

Random Access Iterator :涵盖所有指针算法能力。


struct  input_iterator_tag { };struct  output_iterator_tag { };struct  forward_iterator_tag : public input_iterator_tag { };struct  bidirectional_iterator_tag: public forward_iterator_tag { };struct  random_access_iterator_tag: public bidirectional_iterator_tag { };


这些class只作为标记用,所以不需要任何成员,这些标记放在形参中用来激活重载机制,使不同种类的迭代器使用最有效率的算法。

0 0
原创粉丝点击