• 迭代器(Iterator)详解


    本篇文章将对迭代器(Iterator)从四个方面进行详解。

    1. 是什么

    迭代器(Iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址[1]

    通俗点说,迭代器表现的像指针,读取集合或者数组中的一个值,读完以后又指向下一条数据,一个个数过去。

    2. 为什么

    我们知道,数据容器很多,有数组、链表、树等等,对数据容器中的元素进行遍历也对应的有各自的方法。设想一下,如果我们要为数组和集合设计查找算法,因为找下一个元素在数组和集合中的操作不同,只是为了查找。核心思想是寻找下一个元素,但要实现两套不同的代码,显然这是不优秀的。

    有了迭代器,我们可以将算法和特定的容器分离开来。它可以遍历并选择序列中的对象,而我们不需要了解该序列的底层结构。也就是说功能代码我们只需要实现一套就行。比如要实现查找,那么代码实现后只要对迭代器适用就行了,不用考虑不同的容器之间你的功能代码的底层实现。

    3.怎么用

    迭代器的类型有很多,譬如单向、双向等等。但核心功能是差不多的,当需要追求某一特定容器时可选用更特殊的迭代器。

    例如Java 中的Iterator ,功能比较简单,并且只能单向移动:

        (1) 使用方法iterator() 要求容器返回一个Iterator 。第一次调用Iterator 的next() 方法时,它返回序列的第一个元素。注意:iterator() 方法是java.lang.Iterable 接口,被 Collection 继承。

        (2) 使用next() 获得序列中的下一个元素。

        (3) 使用hasNext() 检查序列中是否还有元素。

        (4) 使用remove() 将迭代器新返回的元素删除。

    Iterator 是 Java 迭代器最简单的实现,为 List设计的 ListIterator 具有更多的功能,它可以从两个方向遍历List ,也可以从List 中插入和删除元素。

    4.注意

    1.在迭代器迭代元素的过程中,不允许使用集合对象改变集合中的元素个数,如果需要添加或者删除只能使用迭代器的方法操作。

    2.如果使用了集合对象改变集合中的元素个数那么就会报错:不改变个数即可,替换也可以的。

    3.迭代器的生存周期为创建到使用结束的时段。

    4. foreach : Iterator 的封装变形,变得比 Iterator更简单。但是他也需要知道数组或集合的类型。并且,Iterator 需要注意的,foreach 同样需要注意。

    参考资料:

    [1] https://baike.baidu.com/item/%E8%BF%AD%E4%BB%A3%E5%99%A8/3803342?fr=aladdin迭代器_百度百科

  • 相关阅读:
    将文件导入到SQL server数据库表中的字段中
    查看端口是否启用
    JS去除字符串左右两端的空格
    css常见问题
    iframe之局部刷新
    iframe局部刷新的二种实现方法
    模式识别复习目录
    linux下文件内容查找 转
    LaTeX技巧10:LaTeX数学公式输入初级入门
    matlab中高维数组怎么做PCA?
  • 原文地址:https://www.cnblogs.com/Sherlock-J/p/12925995.html
Copyright © 2020-2023  润新知