C++:迭代器

文章目录

迭代器功能

  • 一个迭代器需要至少支持两个功能才有用:
    • 访问当前元素 *i
    • 前缀自增操作 ++i (前缀自增和后缀自增是两个操作符)

  • 比较两个迭代器是否指向相同元素 i == ji != j
  • 访问元素的成员 i->m
  • 修改元素 *i = v
  • 单向:支持以上,及可以++
  • 双向:支持以上,及可以--
  • 随机的:
    • 支持一个偏移量: i + ni - n
    • 支持:i += ni -= n
    • 支持两个迭代器 :i - j

    • …像vector线性且连续存储元素的容器才会提供。

对于一个迭代器类型 T,我们会关心和它相关的如下信息:

  • 它是哪种类型的迭代器;
  • 它指向的数据类型是什么;
  • 这个数据类型的引用类型是什么;
  • 这个数据类型的指针类型是什么;
  • 两个迭代器的距离用什么类型表示。
  • 内置类型就是天然的,对于一个自定义的类模板/class类型,需进行操作符重载。
#include <iterator>

class ArrayIterator {
 public:
  typedef std::random_access_iterator_tag iterator_category;  // 迭代器类型 随机
  typedef int value_type;        // 数据类型
  typedef int& reference_type;   // 数据类型的引用
  typedef int* pointer_type;     // 数据类型的指针
  typedef std::ptrdiff_t difference_type;  // 距离类型

  // 迭代器的实现
};


I am a soldier and I’m marching on
我是一个战士,战士在前进

I am a warrior and this is my song
我是一个勇士,这是勇士之歌

my eyes are steel and my gaze is long
目光似铁,视野无限

I am a warrior and this is my song
我是勇士,这就是勇士之歌

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值