迭代器

再探迭代器

江枫思渺然 提交于 2019-12-09 13:18:17
除了为每个容器定义的迭代器之外,标准库在头文件iterator中还定义了额外几种迭代器,包括: 插入迭代器(insert iterator): 这些迭代器被绑定到一个容器上,可用来向容器中插入元素; 插入器有三种类型 back_inserter front_inserter insert 流迭代器(stream iterator): 这些迭代器被绑定到输入或输出流上,可用来便利所有关联的IO流; istream_iterator ostream_itrator #include <list> #include <vector> #include <iostream> #include <iterator> #include <algorithm> using namespace std; void main() { vector<int> vec; istream_iterator<int> in_iter(cin); // read ints from cin istream_iterator<int> eof; // istream ``end'' iterator // use in_iter to read cin storing what we read in vec while (in_iter != eof) // while there's valid input

Java学习之Iterator(迭代器)的一般用法

折月煮酒 提交于 2019-12-09 12:56:27
迭代器(Iterator)   迭代器是一种设计模式,它是一个对象,它可以遍历并选择序列中的对象,而开发人员不需要了解该序列的底层结构。迭代器通常被称为“轻量级”对象,因为创建它的代价小。   Java中的Iterator功能比较简单,并且只能单向移动:   (1) 使用方法iterator()要求容器返回一个Iterator。第一次调用Iterator的next()方法时,它返回序列的第一个元素。注意:iterator()方法是java.lang.Iterable接口,被Collection继承。   (2) 使用next()获得序列中的下一个元素。   (3) 使用hasNext()检查序列中是否还有元素。   (4) 使用remove()将迭代器新返回的元素删除。   Iterator是Java迭代器最简单的实现,为List设计的ListIterator具有更多的功能,它可以从两个方向遍历List,也可以从List中插入和删除元素。 迭代器应用: list l = new ArrayList(); l.add("aa"); l.add("bb"); l.add("cc"); for (Iterator iter = l.iterator(); iter.hasNext();) { String str = (String)iter.next(); System.out

JAVA中的for-each循环与迭代

谁都会走 提交于 2019-12-09 06:18:40
原文链接: http://www.cnblogs.com/gl-developer/p/5971372.html 在写上一个数组的时候发现在主函数中无法通过for-each调用,所以找了相应的文章 在学习java中的collection时注意到,collection层次的根接口Collection实现了Iterable<T>接口(位于java.lang包中),实现这个接口允许对象成为 "foreach" 语句的目标,而此接口中的唯一方法,实现的就是返回一个在一组 T 类型的元素上进行迭代的迭代器。 一、迭代器Iterator 接口:Iterator<T> public interface Iterator<E>{ boolean hasNext(); E next(); void remove(); } 查看Iterator接口API可以知道,这是对collection进行迭代的迭代器。迭代器允许调用者利用定义良好的语义在迭代期间从迭代器所指向的 collection 移除元素。 尤其值得注意的是此迭代器remove()方法的使用:从迭代器指向的 collection 中移除迭代器返回的最后一个元素(可选操作)。每次调用 next 只能调用一次此方法。如果进行迭代时用调用此方法(remove方法)之外的其他方式修改了该迭代器所指向的 collection,则迭代器的行为是不确定的。

Java基础8:Iterator和foreach循环

久未见 提交于 2019-12-09 05:47:07
一、Iterator简介: 1、 java.util.Iterator 为一个接口,它只提供了迭代了基本规则, 提供一种方法访问某个容器(container)对象中的各个元素,而又不需暴露该对象的内部细节 /底层结构 。 在 JDK 中他是这样定义的:对collection 进行迭代的迭代器。 从定义可见, Iterator( 迭代器 ) 模式 又叫做 Cursor ( 游标 )模式 是为容器而生。 它可以把访问逻辑从不同类型的集合类中抽象出来,从而避免2、向客户端暴露集合的内部结构。 2、迭代其实我们可以简单地理解为遍历,是遍历各类容器里面的所有对象的标准访问方法, 它是一个很典型的设计模式。 很明显,对容器对象的访问必然涉及到遍历算法。你可以一股脑的将遍历方法塞到容器对象中去;或者根本不去提供什么遍历算法,让使用容器的人自己去实现去吧。这两种情况好像都能够解决问题。 其源码如下: package java.util; public interface Iterator<E> { boolean hasNext(); E next(); void remove(); } 二、Iterator用法 Java中的Iterator功能比较简单,并且只能单向向前遍历:    (1) 容器调用 iterator() 要求集合类容器返回一个Iterator对象。 注意

迭代器Iterator与for循环的区别

冷暖自知 提交于 2019-12-09 05:46:29
迭代器是一种模式,它可以使得对于序列类型的数据结构的遍历行为与被遍历的对象分离,即我们无需关心该序列的底层结构是什么样子的。只要拿到这个对象,使用迭代器就可以遍历这个对象的内部. 1.Iterator Java提供一个专门的迭代器<<interface>>Iterator,我们可以对某个序列实现该interface,来提供标准的Java迭代器。Iterator接口实现后的功能是“使用”一个迭代器. 文档定义: [java] view plain copy print ? Package java.util; public interface Iterator<E> { boolean hasNext(); //判断是否存在下一个对象元素 E next(); void remove(); } [java] view plain copy print ? <span style= "font-size:18px;" >Package java.util; public interface Iterator<E> { boolean hasNext(); //判断是否存在下一个对象元素 E next(); void remove(); } </span> 2.Iterable Java中还提供了一个Iterable接口,Iterable接口实现后的功能是“返回”一个迭代器

迭代器和for循环的效率比较

我是研究僧i 提交于 2019-12-09 05:45:29
实体Person类 package com.zhang.loop; public class Person { private String a; private int b; public Person(String a, int b) { super(); this.a = a; this.b = b; } public String getA() { return a; } public void setA(String a) { this.a = a; } public int getB() { return b; } public void setB(int b) { this.b = b; } } 测试ArrayList的主程序 package com.zhang.loop; import java.util.ArrayList; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class TestArrayList { private static final int COUNT = 800000; private static List<Person> persons = new ArrayList<Person>(); public

Iterator迭代器和foreach增强for循环的效率比较

◇◆丶佛笑我妖孽 提交于 2019-12-09 05:35:46
2019独角兽企业重金招聘Python工程师标准>>> package cn.jiguang.base64; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import org.junit.Test; public class CollectionTest { public void JDK8DataTimeClockTest() { } @Test public void foreachQuery() { int count = 0; Map<String, String> map = new HashMap<String, String>(); for (int i = 0; i < 100000; i++) { map.put("key=" + i, "value=" + i); } long startTimeFor = System.currentTimeMillis(); for (Entry<String, String> entry : map.entrySet()) { System.out.println(entry.getKey()); System.out.println(entry.getValue

iOS设计模式--迭代器模式

☆樱花仙子☆ 提交于 2019-12-07 08:44:45
何为迭代器模式? 迭代器提供了一种顺序访问集合对象中元素的方法,而无需暴漏结构的底层表示和细节。遍历集合中元素的职能从集合本身转移到迭代器对象。迭代器定义了一个用于访问集合元素并记录当前元素的接口。不同的迭代器可以执行不同的策略。 何时使用迭代器模式? @:需要访问组合对象的内容,而又不暴漏其内部表示。 @:需要通过多种方式遍历组合对象。 @:需要提供一个统一的接口,用来遍历各种类型的组合对象。 在Cocoa Touch框架中使用迭代器模式? 基础框架中的NSEnumerator类实现了迭代器模式。抽象NSEnumerator类的私有具体子类返回枚举器对象,能够顺序遍历各种集合——数组、集合、字典,把集合中的对象返回给客户端。 NSDirectoryEnumerator,这个类的实例递归枚举文件系统中一个目录的内容。NSArray、NSSet、NSDictionary这样的集合类,定义了返回与集合类型相应的NSEnumerator子类实例的方法。所有的枚举器都以同样的方式工作,可以在一个循环中向枚举器发送nextObject消息,从枚举器取得对象,直到它返回nil表示遍历结束。 1.NSEnumerator 我们可以使用NSEnumerator来枚举NSArray、NSDictionary和NSSet对象中的元素。NSEnumerator本身是个抽象类,它有依靠几个工厂方法

python条件与循环-循环

主宰稳场 提交于 2019-12-07 07:30:34
while语句 while用于实现循环语句,通过判断条件是否为真,来决定是否继续执行。 一般语法 语法如下: while expression: suite_to_repeat 计数循环 >>> cnt = 0 >>> while(cnt < 9): ... print 'the index is ', cnt ... cnt += 1 ... the index is 0 the index is 1 the index is 2 the index is 3 the index is 4 the index is 5 the index is 6 the index is 7 the index is 8 代码块里包含print和自增语句,将被重复执行,知道cnt不下于9。 无限循环 while True: suite_to_repeat 条件表达式一直为真。 for语句 for语句是python提供的另一个循环机制,可以用于遍历序列,可以用在列表解析和生成器表达式中。 一般语法 for循环会访问一个可迭代对象(例如序列或叠加器)中的所有元素,并在所有条目处理过后结束循环。语法如下: for iter_var in iterable: suite_to_repeat 每次循环,iter_var迭代变量被设置为可迭代对象(序列、迭代器或其他支持迭代的对象)的当前元素

Java中迭代器所引发的思考(List中迭代器的存在一直是使我迷茫的一个点)

℡╲_俬逩灬. 提交于 2019-12-07 05:08:26
   正像 题目所说,我刚开始学Java接触到集合的时候,发现里面有个迭代器,不准确的说应该是我同学告诉我里面有个迭代器,然后说的很屌的样子。But,说实话,我真心觉得这个迭代器的存在简直是不可理解,比Java的泛型还扯淡,没有丝毫存在的价值。里面的迭代我完全可以自己写一个简单方法用来实习嘛,无非就遍历一下集合给我个这么复杂的方式干嘛。当时因为心思浮躁我就自欺欺人的告诉自己这属于一种设计模式,也就自己把自己蒙混过关不再考虑这个我丝毫不能理解的操作了。不过好在最近工作用的底层接口各种迭代器和C++模板搞得我想吐。也终于明白了迭代器真的是一个好的存在。   首先咱们先不去分析Java中的迭代器的好坏,价值不大。Java集合中迭代器的存在真的是没什么太大的价值,不过这并不能怪Java本身,因为就我目前的知识而言,各个语言平台对迭代器的实现无非都是迭代一下集合中的元素,这也是我们在使用迭代器时不能明白他存在的价值的原因。那么来举个例子看一下,咱们来稍微感受一下迭代器的一个完美应用。   现在呢,咱们来写一个斐波那契的实现。具体要求是: 用计算机输出斐波那契数列的前count个元素。    来一种最直观的的实现: static void printFibonacci( int count) { int fibonacci_n1 = 0 ; int fibonacci_n2 = 1 ; //