为何使用迭代器?-创新互联

STL是一种泛型编程。那么泛型编程与面向对象编程有什么不同呢?泛型编程关注的是算法,而面向对象编程关注的编程的数据方面。共同点是,都通过抽象和创建可重用的代码,提升编程效率。但是两者的理念绝然不同。为何使用迭代器?理解迭代器是理解STL的关键所在。通常情况下,我们遍历数组是通过 p++,遍历链表是p = p->next,遍历二叉树,还分为p =p->left,p = p->right;我们对指针如何操作,取决于其存储的数据结构。而迭代器的作用,就是使这些操作独立于数据结构。模板使得算法,独立于数据类型;迭代器使得算法,独立于容器类型(数据结构)。

成都创新互联是一家专业提供东乌珠穆沁企业网站建设,专注与成都网站设计、成都网站制作、外贸网站建设HTML5、小程序制作等业务。10年已为东乌珠穆沁众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。主要思想以STL算法库(algorithm)中的find()函数举例。泛型编程旨在使用同一个find函数,来处理vector、list或其他任何容器类型。即函数不仅独立于数据类型,还独立于容器的数据结构。所以要实现find函数,迭代器应具备那些特征呢?
  •      能够解引用,即取*操作;
  •      能够赋值,即对于两个迭代器,应可以使用表达式p = q;
  •      能够比较,即 p == q或  p != q;
  •      能遍历所有元素,即能够p++和++p;
即重载“ * ”“ = ”" == "" != "" p++ "" ++p "运算符。以List为例:

这样在List中,对指针的操作就和在vector中基本是一样的了。(这里穿插一个概念,对于不同的容器,迭代器可能是指针,也可能是对象。


为什么说是基本一样呢?最后的差别在于,如何判断到达最后一个元素。vector通过判断是否遍历到了最后一个元素的下一个元素,使用了超尾迭代器。List则是通过判断最后一个结点中的next是否为空。


为了使迭代器的使用完相同,可以要求链表最后一个元素后面,还有一个额外的元素。(超尾元素)。这样使find函数在面对vector和List时,都在迭代器达到超尾位置时结束。 注意:这使得,超尾元素从对迭代器的要求,变成了对容器的要求STL为使通用算法能够适用于具体情况,应定义能够满足算法需求的迭代器,并要求把对迭代器的部分要求,加到容器设计上。

     ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​        ​​​​​​​   -----本文摘自《C++ Prinmer Plus》第六版 553页

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧


网页名称:为何使用迭代器?-创新互联
当前地址:http://myzitong.com/article/dogicg.html