初识迭代器 C++ Iterator

一:初识迭代器(Iterator类) 简写为 iter

(1)由来,我们知道string类 vector类的对象,可以通过下标运算来访问元素;还有另外一种更通用的机制 -- 迭代器。不管你是用到 vector 还是list 或 map类你总离不开迭代器的。

(2)所有标准库容器都可以使用迭代器,但是其中只有几种容器才同时支持下标运算符。(string不属于容器类型,但是基本操作与容器类似)

(3) 类似于指针类型,迭代器也提供了对对象的间接访问:iter可以访问某个元素,从一个元素移动到另一个元素。(iter对象是容器中的元素或者string对象中的字符)

(4)iter有有效和无效之分,这一点和指针差不多,有效的iter或指向某个元素或指向尾元素的下一位置,其它的都是无效位置。

(5)与指针不同的,iter不是使用取地址符(&),而是有返回迭代器类型的成员,如begin()(指向第一个元素的位置),end()(指向尾元素的下一个位置)

二:迭代器给我们带来了什么

(1)迭代器支持的运算符

(*iter) :所指向元素的引用

iter->mem :解引用iter,并获取该元素的名为mem的成员,等价于(*iter).mem
++iter :指向下一个元素
--iter :指向上一个元素
iter1 == iter2 : 两个迭代器是否指向同一个元素
iter1 != iter2

(2)编程风格:再循环条件结束的条件,c++程序员习惯性地使用 != 而非 < ;这是因为iter迭代器都定义了 == 和 != ,而它们中的大多数都没有定义 < 运算符。

(3) 只有string 和 vector 等一些标准库类型 有下标运算符;

vector<int>::iterator it;// 读写,普通迭代器
vector<int>::const_iterator it; 仅读 --> 类似于常量指针,常量迭代器

(4)c+11 引入了 cbegin() 和 cend(),返回常指针iter(类似于指针)

(*iter).empty(),括号不能少的 或者it->mem (这等同于(*iter).mem );(*iter) 解引用迭代器可获得迭代器所指向的对象;如果该对象恰好是类,就有可能希望进一步访问它的成员。

(5)谨记一句话,但凡使用了迭代器的循环体,都不要向迭代器所属的容器添加元素。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值