迭代器简析

本文介绍了STL容器中迭代器的基本概念与使用方法,包括其提供的基本操作符、类型定义及如何通过迭代器遍历容器元素等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

“迭代器是一个可以遍历 STL 容器内全部或部分元素的对象。一个迭代器用来指出容器中的一个特定位置。”
“迭代器提供一些基本操作符: * ++ == 、! = = 。这些操作和 C/C++ “操作 array 元素”时的指针接口一致。不同之处在于,迭代器是个所谓的 smart pointers ,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型别都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型别却不同。这直接导出了泛型程序设计的感念:所有操作行为都使用相同接口,虽然它们的型别不同。“
越往后看,越觉得 STL 的深不可测,如此复杂的数据结构被高度统一起来,越看越觉得激动,激动于如此神妙的技术。至此往后,我未必会多些自己的感慨,但我想我会将使我激动的这些文字一一记录下来。来,咱们继续……
还记得上篇里那个 list 的实例么?现在有一个更漂亮的版本出现了,那就是使用了 list 迭代器的版本。
main
{
/* 前面的代码片断省略了。
/*print all elements
list<char>::const_iterator pos;/* 生命一个list的迭代器
for(pos=coll.begin();pos!=coll.end();++pos)
   cout<<*pos<<’’;
cout<<endl;
}
迭代器pos声明于循环之前,其型别是“指向容器中的不可变元素”的迭代器:list<char>::const_iterator pos;
所有的容器都可以定义两种迭代器:
container ::iterator  “读/写”模式遍历元素
container ::const_iterator  “只读”模式遍历元素
我们可以看到利用了迭代器之后,就是把判断是否到达边界的任务隐藏起来了。我们不用知道如何判断到达边界。不过,知道其中的原理总是好的,虽然我们有了标准库,我们可以直接调用各种算法,但那只是提高代码的复用性,作为学习本身,我们还是应该知道其所以然的。扯远了…
pos 本身使用++进行递增变化,从头走到尾,并使用*pos来表示其所指向的元素。越来越觉得迭代器像一个封装了一些功能的指针,不是吗?另外,书中建议pos采用这样:++pos的方式递增,即前置式递增。因为这样的效率比pos++更高。原因是:pos++要建立一个额外的临时对象。(汗~~典型的效率优先,C++迷人的地方之一)
迭代器分为:双向迭代器、随机存取迭代器。
好了,迭代器暂告一段落吧。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值