【C++】STL系列(3):迭代器Iterator

–本文章来自侯捷老师的STL课程和自己的理解

如有错误,欢迎指出

这里我打算打乱老师的讲课顺序,因为毕竟是总结性质的文章,我觉得先介绍迭代器会比较好。

迭代器是链接算法和容l器的桥梁。算法对容器里面的一切都一无所知,他所需要的一切信息都由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{};(随机迭代器)

同时,每个迭代器需要具有如下的信息(一般用typedef来提供)提供给算法:
在这里插入图片描述
注:reference_type和pointer_type从未使用过,但是依旧需要定义出来。

定义迭代器的时候,又具有以下的种类(这和迭代器类型是不冲突的,一个是在定义的时候需要的使用方式,一种是它本质上是个什么迭代器)。
在这里插入图片描述
但是有一些迭代器不是类,比如说指针,那么怎么提供上面需要的那五种信息呢?这个时候就要用到Iterator traits来提供这些信息
可以将traits理解为一个加工厂,进去的类型在加工过后都会提供一样的信息类型。
在这里插入图片描述

实现原理其实也是泛化和偏特化的使用,针对不同的输入类型不同处理。
在这里插入图片描述
在这里插入图片描述
而算法内部去获取这些信息的时候,就是通过对应的名称去获取的,例如这样:
在这里插入图片描述
容器所选取的迭代器种类大致如下:
在这里插入图片描述

顺便提一下迭代器的辅助函数:
在这里插入图片描述
注:因为迭代器需要像指针一样使用,其内部一定是重载了大量操作符的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值