iterator 订阅
迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。 展开全文
迭代器(iterator)有时又称游标(cursor)是程序设计的软件设计模式,可在容器(container,例如链表或阵列)上遍访的接口,设计人员无需关心容器的内容。
信息
外文名
iterator
别    称
游标卡尺
提出者
张康健
中文名
迭代器
适用领域范围
IT行业
迭代器解释
迭代器(iterator)是一种对象,它能够用来遍历标准模板库容器中的部分或全部元素,每个迭代器对象代表容器中的确定的地址。迭代器修改了常规指针的接口,所谓迭代器是一种概念上的抽象:那些行为上像迭代器的东西都可以叫做迭代器。然而迭代器有很多不同的能力,它可以把抽象容器和通用算法有机的统一起来。迭代器提供一些基本操作符:*、++、==、!=、=。这些操作和C/C++“操作array元素”时的指针接口一致。不同之处在于,迭代器是个所谓的复杂的指针,具有遍历复杂数据结构的能力。其下层运行机制取决于其所遍历的数据结构。因此,每一种容器型都必须提供自己的迭代器。事实上每一种容器都将其迭代器以嵌套的方式定义于内部。因此各种迭代器的接口相同,型号却不同。这直接导出了泛型程序设计的概念:所有操作行为都使用相同接口,虽然它们的型别不同。迭代器使开发人员能够在类或结构中支持foreach迭代,而不必整个实现IEnumerable或者IEnumerator接口。只需提供一个迭代器,即可遍历类中的数据结构。当编译器检测到迭代器时,将自动生成IEnumerable接口或者IEnumerator接口的Current,MoveNext和Dispose方法。1.迭代器是可以返回相同类型值的有序序列的一段代码;2.迭代器可用作方法、运算符或get访问器的代码体;3.迭代器代码使用yieldreturn语句依次返回每个元素,yield break将终止迭代;4.可以在类中实现多个迭代器,每个迭代器都必须像任何类成员一样有惟一的名称,并且可以在foreach语句中被客户端,代码调用如下所示:foreach(int x in SimpleClass.Iterator2){};5.迭代器的返回类型必须为IEnumerable和IEnumerator中的任意一种;6.迭代器是产生值的有序序列的一个语句块,不同于有一个 或多个yield语句存在的常规语句块;7.迭代器不是一种成员,它只是实现函数成员的方式,理解这一点是很重要的,一个通过迭代器实现的成员,可以被其他可能或不可能通过迭代器实现的成员覆盖和重载;8.迭代器块在C#语法中不是独特的元素,它们在几个方面受到限制,并且主要作用在函数成员声明的语义上,它们在语法上只是语句块而已;9.yield关键字用于指定返回的值。到达yieldreturn语句时,会保存当前位置。下次调用迭代器时将从此位置重新开始执行。 迭代器对集合类特别有用,它提供一种简单的方法来迭代不常用的数据结构(如二进制树)。迭代器是一种检查容器内元素并遍历元素的可带泛型数据类型。
收起全文
精华内容
下载资源
问答
  • Iterator

    千次阅读 2019-06-05 22:14:58
    Iterator

    Iterator

    Iterator:迭代器,它是Java集合的顶层接口(不包括 map 系列的集合,Map接口 是 map 系列集合的顶层接口)
    主要包含三种方法:

    1. hasNext()是否还有下一个元素。
    2. next()返回下一个元素。
    3. remove()删除当前元素。
    展开全文
  • iterator

    2018-11-15 17:17:54
    每当一个对象需要被迭代时(例如在for…of循环的开头),它的@@iterator方法被调用而没有参数,并且返回的迭代器用于获取要迭代的值。 某些内置类型具有默认的迭代行为,而其他类型(例如Object)则没有。带有@@...

    每当一个对象需要被迭代时(例如在for…of循环的开头),它的@@iterator方法被调用而没有参数,并且返回的迭代器用于获取要迭代的值。

    某些内置类型具有默认的迭代行为,而其他类型(例如Object)则没有。带有@@iterator方法的内置类型是:

    Array.prototype@@iterator
    TypedArray.prototype@@iterator
    String.prototype@@iterator
    Map.prototype@@iterator
    Set.prototype@@iterator

    展开全文
  • 理由如下: 有些版本的insert和erase函数要求使用...要想隐式地将一个const_iterator装换成iterator是不能的。 从reverse_iterator装换而来的iterator在使用之前可能需要相应的调整。 由此可见,尽量使用itera...

    四种iterator的相互转换如下:
    在这里插入图片描述

    理由如下:

    • 有些版本的insert和erase函数要求使用iterator。如果你需要调用这些函数,那你就必须使用iterator。const和reverse类型的迭代器不能满足这些函数的要求。
    • 要想隐式地将一个const_iterator装换成iterator是不能的。
    • 从reverse_iterator装换而来的iterator在使用之前可能需要相应的调整。

    由此可见,尽量使用iterator而不是const或reverse类型的迭代器,可以使容器的使用更为简单而有效,并且可以避免潜在的问题。

    展开全文
  • JAVA iteratoriterator模式

    千次阅读 2016-04-28 14:33:47
    Iterator 模式 JAVA Collection 接口中有一个方法,iterator(),而Set,List,Queue都继承自Collection。 由于对Collection对象的遍历需求,进而产生了iterator。 这里介绍iterator模式及Java Iterator

    一 遇到问题----

    List的两种遍历方法,如下代码所示:

    <span style="font-family:SimSun;">import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.Iterator;
    import java.util.LinkedList;
    import java.util.List;
    import java.util.ListIterator;
    
    public class IteratorTest {
    	static String []data = {"orange","apple","banana","pear","orange","grape"};
        static List list = new ArrayList<String>();
    	// 利用iterator遍历
    	public static void traversal1(){		
    		Iterator iterator = list.iterator();
    		while (iterator.hasNext()){
    			System.out.println(iterator.next());
    			
    		}
    		System.out.println(list);
    	}
    	public static void traversal2(){	
    		list = Arrays.asList(data);
    		for (String s : data){ // 利用for遍历
    			System.out.println(s);
    		}
    	}
    	public static void main(String[]args){
    		for (int i =0;i<data.length;i++){
    			list.add(data[i]);
    		}
    		traversal1();
    		traversal2();
    		
    	}
    }
    </span>

    代码中对List用两种方法生成,其实第二种List不是真正的List,只是Arrays$ArrayList,不能进行remove()等操作,这是后话。

    二 提出问题------为什么需要iterator?优势?

    java集合类

    Collection是一个接口,由此产生诸多集合类,如List,Queue,Set,对Collection有时有遍历的需求,因此有上述问题的产生。本文以ArrayList为例,讲解java Iterator类和iterator模式

    Iterator模式产生背景

    在java中的List及其他集合类中需要遍历时,可以采用get()和for进行,但是这样有一个明显的缺点,List本身和对List的访问操作耦合性强,为了使得对List乃至Colletion的操作与数据本身分离,产生了iterator模式。

    GOF给出的定义为:提供一种方法访问一个容器(container)对象中各个元素,而又不需暴露该对象的内部细节。

    Iterator模式原理

    为了让使用者使用时不暴露内部细节,List等集合类必须自己封装一套访问提供给访问者,这套访问机制称为iterator,因此iteraotr必须由数据提供者进行实现


    本文以javaArrayList的实现为例进行讲解,本文重点讲述iterator的实现思想,其余省略。

    废话少说,上类图,ArrayListIterator的相关类图如下:


    类图解析:

    Iterator为一个接口,只定义了三个方法,hasNext(),next(),和remove()。

    Collection接口继承Iterable接口,提供了一个iterator()方法,使得Collection子类通过iterator()方法获取Collection内部实现的Iterator对象。

    ArrayList的内部具体实现iterator()方法,提供一个ListIterator的对象,由ArrayList实现

    上文得知,iterator具体实现必须在ArrayList本身中实现,ArrayList实现的是一个ListIterator,实现部分代码如下:

    public class ArrayList {
    	/**
    		other ....
    	*/
    	public Iterator<E> iterator(){
    		return listIterator();
    	}
    
    	public ListIterator<E> listIterator ()
    		return new ListIterator<E>(){
    			/* 具体实现 */
    			public boolean hasNext(){/* ... */ }
    			public E next(){/* ... */}
    			public remove(){/* ... */}
    			
    		}
    	}
    }


    三 问题延伸------iterator与原有方法的对比

    Iterator和List的remove

    在List和iterator中都有remove这个方法,有什么区别看看定义:

    Iterator:remove()

    Removes from the underlying collection thelast element returned by this iterator (optional operation).

    ArrayList的remove

    remove(int index)

    Removes theelement at the specified position in this list (optional operation).

    从参数就能看出差别,iterator删除最后一个迭代过的元素,而List中则按照index进行删除,对ArrayList,每次删除一个元素都要进行移动,因此效率不高,下面是remove的代码片段。

    public class ArrayList {
    	/**
    		other ....
    	*/
    	public Iterator<E> iterator(){
    		return listIterator();
    	}
    
    	public ListIterator<E> listIterator ()
    		return new ListIterator<E>(){
    			/* 具体实现 */
    			public boolean hasNext(){/* ... */ }
    			public E next(){/* ... */}
    			public remove(){/* ... */}
    			
    		}
    	}
    }


     
    
     
    


    四问题总结-------iterator的使用建议

    在使用集合类时,可以使用iterator进行遍历,不同的Collection实现有着不同的iterator,比如List中的iterator返回的ListIterator就有previous()等方法。


    展开全文
  • Iterator对象

    千次阅读 2018-12-13 14:58:01
    Iterator对象, 是一个引用型变量,他存在的意义在于,为了遍历容器对象中的元素而不暴露容器对象内部的细节。 iterator()方法是容器变量使用,返回一个Iterator对象。该对象也是一个容器。 因为他里面存放着...
  • iterator_adaptor.pdf

    2021-08-13 00:07:26
    Boost Iterator_adaptor
  • 最近研究iterator,看了下const_iterator和const iterator的使用,记录下来,以供以后参考。
  • php之IteratorIterator个人理解

    千次阅读 2018-10-01 11:38:44
    php IteratorIterator个人理解IteratorIterator简介重点理解代码演示运行结果:结果分析一点补充 最近有重新开始捣鼓laravel的源码了,一年多没用实在是忘的差不多了,每次看都会从中学到很多,不懂就赶紧查手册。...
  • Iterator用法

    2010-11-29 00:32:30
    介绍C++中Iterator的用法,很实用
  • Iterator接口

    千次阅读 2019-02-24 15:15:32
    1:所有实现了Collection接口的容器类都有一个iterator方法用以返回一个实现了Iterator接口的对象。 2:Iterator对象称作迭代器,用以方便的实现对容器内元素的遍历操作。 3:Iterator接口定义了如下方法 可以将...
  • 如果你传递过来一个const类型的容器,那么只能用const_iterator来遍历。 void Method(const vector vInt) { vector::const_iterator iter; } 示例: vector ivec; vector::const_iterator citer1 =...
  • Iterator迭代器

    千次阅读 2017-08-07 22:17:37
    Iterator是一个迭代器接口,它专门用于迭代各种Collection集合,包括Set集合和List集合。如果查阅JDK的API文档将发现,Iterator迭代器接口只有一个Scanner实现类。显然Scanner并不能用于迭代Set、List集合,那迭代...
  • iterator迭代器

    千次阅读 多人点赞 2021-09-04 23:57:41
    1、什么是迭代器(Iterator) 迭代器是一种特殊对象,是为各数据结构的迭代过程设计的专有接口。迭代器对象都有一个next。方法,每一次调用next方法 , 都会返回数据结构的当前成员的信息,即返回一个对象: {done:...
  • Iterator迭代器的用法

    2018-12-11 21:12:28
    该文档是演示迭代器Iterator的使用方法和源代码,其中包括了Iterator的继承类的讲解和再Iterator中的两种方法
  • const iterator与const_iterator的区别 const iterator相当于指针常量。即,指针本身为常量,指针自身不可修改,但指向内容可修改。 const_iterator相当于常量指针。即,指针指向的内容为常量,指针本身可修改,...
  • Iterator模式

    千次阅读 2015-08-27 21:57:50
    STL中的集合都有IteratorIterator模式的作用是遍历集合中的元素。它的实现原理为把遍历封装到一个类中进行(Iterator类),这样避免了暴露这个聚合对象内部。
  • 主要介绍了JavaScript实现Iterator模式,实例分析了Iterator模式的相关实现技巧,需要的朋友可以参考下
  • Iterator原理

    千次阅读 2016-08-15 13:06:21
    Iterator用于遍历集合中的元素,适用于不知道集合内部结构的情况。用户不再与集合类交互,而是与Iterator交互,其清楚知道集合类的内部状态,通过控制iterator达到遍历集合的目的。
  • iterator与const_iterator

    千次阅读 2012-08-22 14:33:37
    所有的标准库容器都...1.iterator,const_iterator作用:遍历容器内的元素,并访问这些元素的值。iterator可以改元素值,但const_iterator不可改。跟C的指针有点像 (容器均可以++iter,而vector还可以iter-n, iter+n,n
  • 迭代器 Iterator 是什么

    万次阅读 2019-05-07 10:49:26
    迭代器 Iterator 是什么? 首先说一下迭代器模式,它是 Java 中常用的设计模式之一。用于顺序访问集合对象的元素,无需知道集合对象的底层实现。 Iterator 是可以遍历集合的对象,为各种容器提供了公共的操作...
  • 所谓Iterator模式,即是Iterator为不同的容器提供一个统一的访问方式。本文以java中的容器为例,模拟Iterator的原理。需要的朋友可以参考下
  • 有些版本的insert和erase函数要求使用iterator。如果你需要调用这些函数,那么必须使用iterator。const和reverse型的迭代器不能满足这些函数要求。要想隐式将一个const_iterator转换成iterator式不可能的从reverse_...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 692,895
精华内容 277,158
关键字:

iterator