【C++学习笔记】容器迭代器

1、迭代器(Iterator)的介绍

背景:指针可以用来遍历存储空间连续的数据结构,但是对于存储空间费连续的,就需要寻找一个行为类似指针的类,来对非数组的数据结构进行遍历。
定义:迭代器是一种检查容器内元素并遍历元素的数据类型。

迭代器提供对一个容器中的对象的访问方法,并且定义了容器中对象的范围。

迭代器(Iterator)是指针(pointer)的泛化,它允许程序员用相同的方式处理不同的数据结构(容器)。

  • 迭代器类似于C语言里面的指针类型,它提供了对对象的间接访问。
  • 指针是C语言中的知识点,迭代器是C++中的知识点。指针较灵活,迭代器功能较丰富。
  • 迭代器提供一个对容器对象或者string对象的访问方法,并定义了容器范围。
2、迭代器和指针的区别:

容器和string有迭代器类型同时拥有返回迭代器的成员。
如:容器有成员begin和end,其中begin成员复制返回指向第一个元素的迭代器,而end成员返回指向容器尾元素的下一个位置的迭代器,也就是说end指示的是一个不存在的元素,所以end返回的是尾后迭代器。

3、容器迭代器的使用

每种容器类型都定义了自己的迭代器类型,

//如 vector:

vectorvector< int>:: iterator iter;

//定义一个名为iter的变量,
//数据类型是由vector< int>定义的iterator 类型

简单说就是容器类定义了自己的iterator类型,用于访问容器内的元素。每个容器定义了一种名为iterator的类型,这种类型支持迭代器的各种行为。

常用容器迭代器类型如下:

容器支持的迭代器类型说明
vector随机访问一种随机访问的数组类型,提供了对数组元素进行快速访问以及在序列尾部进行快速的插入和删除操作的功能。可以在需要的时候修改自身的大小
deque随机访问一种随机访问的数组类型,提供了序列两端快速进行插入和删除的功能。可以在需要的时候修改其自身的大小
list双向一种不支持随机访问的数组类型,插入和删除所花费的时间都是固定的,与位置无关
set双向一种随机存取的容器,其关键字和数据元素是同一个值,所有元素都必须具有唯一值
multiset双向一中随机存取的容器,其关键字和数据元素是同一个值,可以包含重复的元素
map双向一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字,一个特定的关键字智能与一个元素关联
multimap双向一种包含成对数值的容器,一个值是实际数据值,另一个是用来寻找数据的关键字,一个关键字可以与多个数据元素关联

迭代器类型主要支持两类,随机访问和双向访问。其中vector和deque支持随机访问,list,set,map等支持双向访问。
1)随机访问:提供了对数组元素进行快速随机访问以及在序列尾部进行快速插入和删除操作。
2)双向访问:插入和删除所花费的时间是固定的,与位置无关。

4、迭代器的操作
迭代器类型操作说明
所有迭代器p++后置自增迭代器
++p前置自增迭代器
双向迭代器–p前置自减迭代器
p–后置自减迭代器
输入迭代器*p复引用迭代器,作为右值
p=p1将一个迭代器赋给另一个迭代器
p==p1比较迭代器的相等性
p!=p1比较迭代器的不等性
输出迭代器*p复引用迭代器,作为左值
p=p1将一个迭代器赋给另一个迭代器
正向迭代器提供输入输出迭代器的所功能
随机迭代器p+=i将迭代器递增i位
p-=i将迭代器递减i位
p+i将p位加i位后的迭代器
p-i将p位减i位后的迭代器
p[i]返回p位元素偏离i位的元素引用
p如果迭代器p的位置在p1前,返回true,否则返回false
p<=p1如果迭代器p的位置在p1前或在同一位置时返回true,否则返回false
p>p1如果迭代器p的位置在p1后,返回true,否则返回false
p>=p1如果迭代器p的位置在p1后或在同一位置时返回true,返回true,否则返回false
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值