迭代器的设计原则

iterator必须提供5种associated types

1.iterator_category
2.value_type
3.diiference_type
4.pointer
5.reference

对于iterator_category来说,例如双向链表:
typedef bidirectional_iterator_tag iterator_category;

算法和迭代器的关系:

算法提问,迭代器回答

algorithm(I first,I end)
{
...
	I::iterator_category
	I::value_type
	I::diiference_type
	I::pointer
	I::reference
...
}

Traits 萃取机

由于iterator回答的是class中使用的typedef
而算法提问时,可能涉及到non_class iterators
此时就想要中间层:Traits
用于分离class iterators和non_class iterators
Traits:

template <class I> 
struct iterator_traits{
	typedef typename I::value_type value_type;
};

于是当需要知道I的value type时便可这么写:

void algorithm(...){
	typename iterator_traits <I>::value_type v1;
}

不同类型传递给萃取器:
在这里插入图片描述
value_type的主要目的是用来声明变量,而声明一个无法被赋值的变量没什么用,所以iterator(即便是constant iterator)的value type 不应该加上const。iterator若是const int*,其value_type应该是int而非const int。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Strive_LiJiaLe

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值