2 STL迭代器介绍【前向迭代器、双向迭代器、随机访问迭代器】【迭代器遍历容器】

13 篇文章 2 订阅

0 - 前言

参考:http://c.biancheng.net/view/6675.html

1 - 迭代器定义

每一种容器都有对应类型的迭代器,也就是,不同容器的迭代器也不同,其功能强弱也有所不同。容器的迭代器的功能强弱,决定了该容器是否支持 STL 中的某种算法。

2 - 迭代器分类

常用的迭代器按功能强弱分为输入迭代器、输出迭代器、前向迭代器双向迭代器随机访问迭代器 5 种。常用的就是后三种,输入迭代器和输出迭代器比较特殊,它们不是把数组或容器当做操作对象,而是把输入流/输出流作为操作对象。

  • 前向迭代器(forward iterator):

    假设 p 是一个前向迭代器,则 p 支持 ++p,p++,*p 操作,还可以被复制或赋值,可以用 == 和 != 运算符进行比较。此外,两个正向迭代器可以互相赋值。

  • 双向迭代器(bidirectional iterator)

双向迭代器具有正向迭代器的全部功能,除此之外,假设 p 是一个双向迭代器,则还可以进行 --p 或者 p-- 操作(即一次向后移动一个位置)。

  • 随机访问迭代器(random access iterator)

    随机访问迭代器具有双向迭代器的全部功能。除此之外,假设 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作:

    • p+=i:使得 p 往后移动 i 个元素。
    • p-=i:使得 p 往前移动 i 个元素。
    • p+i:返回 p 后面第 i 个元素的迭代器。
    • p-i:返回 p 前面第 i 个元素的迭代器。
    • p[i]:返回 p 后面第 i 个元素的引用。
    • 此外,两个随机访问迭代器 p1、p2 还可以用 <、>、<=、>= 运算符进行比较。另外,表达式 p2-p1 也是有定义的,其返回值表示 p2 所指向元素和 p1 所指向元素的序号之差(也可以说是 p2 和 p1 之间的元素个数减一)。

在这里插入图片描述

3 - 迭代器使用

对于迭代器的用处,最常见的就是遍历某个容器

在遍历的过程中,遍历条件受不同种类的迭代器影响,常见的迭代方式主要有以下几种:

//v是一个容器,暂不指定类型
//遍历方式 ①
for(i = v.begin(); i != v.end(); ++i)
    cout << *i;

//遍历方式②:双向迭代器不支持用“<”进行比较
for(i = v.begin(); i < v.end(); ++i)
    cout << *i;

//遍历方式③:双向迭代器不支持用下标随机访问元素
for(int i=0; i<v.size(); ++i)
    cout << v[i];
  • 16
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值