STL::iterator迭代器

迭代器是一种泛化的指针

iterator遵循的原则:

因为迭代器是算法连接容器的桥梁,算法通过迭代器操作容器实现算法的目标。所以算法有时需要去了解迭代器的特征(trait)来更好的使用迭代器。
不同容器的迭代器都需要声明5个特征供算法查询:
_List_iterator内的5个 特征声明:
在这里插入图片描述
在这里插入图片描述

算法内获取迭代器特征的方法:

当迭代器I是一个class时可以直接获取
在这里插入图片描述
萃取机 traits
问题:当迭代器不是类时怎么办?例如是一个指针,无法进行typedef。
解决:利用一个萃取机 iterator_traits 可以分离class iterator 和non-class iterator。

	template<typename I>
	void algorithm()
	{…
	typename iterator_traits<I>::value_type v1;            //如果I是一个class则直接返回其typedef的value_type,若I是一个指针则 iterator_traits通过其他操作返回正确的value_type值。
	                                                       //v1为得到的类型名,可以用来声明变量。}

同理迭代器的5个特征都可以使用萃取机得到正确的值而不管迭代器是类还是指针。
如果是类则直接返回类内的typedef,如果是指针则用其他方法(针对指针的偏特化模板)返回正确值。

STL::iterator迭代器分类

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值