初探迭代器-凯发app官方网站

凯发app官方网站-凯发k8官网下载客户端中心 | | 凯发app官方网站-凯发k8官网下载客户端中心
  • 博客访问: 125814
  • 博文数量: 11
  • 博客积分: 194
  • 博客等级: 入伍新兵
  • 技术积分: 190
  • 用 户 组: 普通用户
  • 注册时间: 2012-10-24 08:20
文章分类

全部博文(11)

文章存档

2013年(8)

2012年(3)

相关博文
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·
  • ·

分类: c/c

2013-08-08 14:19:51

阅读此文 需要一点c ,数据结构与算法基础(仅仅是基础就够了)

stl中有很重要的两个部分,容器和算法。所谓容器,就是装有很多数据的黑箱子,所谓算法,就是对这些数据进行计算。这其中有一个很重要的问题,对于算法来说容器是一个黑箱子,它不知道容器的内部结构,但是它又要知道容器中有什么数据,这就需要一个桥梁来连接容器与算法。这个桥梁可以对所有容器中的数据进行访问,所有算法的实现又要依赖于这个桥梁,所以这个东西显得尤为重要。在stl中,这个桥梁被称为迭代器。讲容器时要用到迭代器的使用,讲算法也要用到迭代器的使用,看起来先讲迭代器好像有点突兀,其实也未必不可。

要对容器进行访问需要解决如下几个问题:

1.如何指明我们想要查找的序列

2.如何表示序列中的位置

3.如何移动到下一个元素

4.如何知道我们已经到达序列尾端了

5.用来表示查找失败的返回值是什么

如果数据是连续存储的,那么遍历起来就很方便了,直接用指针就可以了,以上问题都可以解决:

1.用首尾指针或是指向首元素的指针加元素个数就可以

2.直接用指针

3. 操作即可

4.到达尾部指针或是数量够了

5.空指针null即可

用模板就很容易实现这些东西了,但是在容器中数据并不一定是连续存储的,那么该怎么办呢,stl给出了一种很好的解决办法,用迭代器来模拟指针,为了使用的方便,它的很多操作都和指针相似,再来看一下刚才的五个问题:

1.是使用两个迭代器来标识一个序列,还是用首元素的迭代器加元素个数呢,stl选择了前者,原因有很多,主要就是因为它比较方便,如果你使用迭代器或是实现一个迭代器,就能体会到

2.直接用迭代器就可以了,用于标识一个元素的迭代器其实内部还是用指针实现的

3.重载 (前置,后置)运算符即可

4.使用一个特殊的迭代器,它指向最后一个元素之后,此迭代器不可dereference

5.stl中还是使用了上边那个特殊的迭代器,这个可能是为了实现起来比较方便

还有一个问题就是为何采用了[begin,end)这样一个不对称的区间,其实这个风格是完全符合c 的语法的,其数组就是从0开始计数的,end与begin之差也表示容器中元素的个数,用多了也会感觉这样会很舒服的。

其实迭代器并不是上边说的这么简单,它里面还有很多东西,以后会慢慢讲。迭代器初步的介绍就到这里,以后的内容可能会比较枯燥,如果没有兴趣,看到这里也就可以了,完。

阅读(2030) | 评论(0) | 转发(0) |
0

上一篇:stl简介

下一篇:文本压缩理论简介

给主人留下些什么吧!~~
")); function link(t){ var href= $(t).attr('href'); href ="?url=" encodeuricomponent(location.href); $(t).attr('href',href); //setcookie("returnouturl", location.href, 60, "/"); }
网站地图