STL 型别技术

4 篇文章 0 订阅
1 篇文章 0 订阅

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_tag	iterator_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_tag	iterator_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
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值