迭代器

J

谁都会走 提交于 2019-11-29 10:32:56
J ava迭代器 迭代器的作用:就是用于抓取集合中的元素。 迭代器的方法: hasNext() 问是否有元素可遍历。如果有元素可以遍历,返回true,否则返回false 。 next() 获取元素... remove() 移除迭代器最后一次返回 的元素 NoSuchElementException 没有元素的异常。 出现的原因: 没有元素可以被迭代了。。。 import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; public class Demo01 { public static void main(String[] args) { Collection c1=new ArrayList() ; c1.add("狗娃"); c1.add("狗剩"); c1.add("铁蛋");     c1.add("美美"); Iterator it =c1.iterator(); while (it.hasNext()) { System.out.println("元素是:"+it.next()); } } } 输出结果: 元素是:狗娃 元素是:狗剩 元素是:铁蛋 元素是:美美 Q: Iterator()方法返回是一个接口类型,为什么接口又可以调用方法使用呢? A: i

c++迭代器功能分类

為{幸葍}努か 提交于 2019-11-29 09:52:44
迭代器的功能分类 不同容器的迭代器,其功能强弱有所不同。容器的迭代器的功能强弱,决定了该容器是否支持 STL 中的某种算法。例如,排序算法需要通过随机访问迭代器来访问容器中的元素,因此有的容器就不支持排序算法。 常用的迭代器按功能强弱分为输入、输出、正向、双向、随机访问五种,这里只介绍常用的三种。 1) 正向迭代器。假设 p 是一个正向迭代器,则 p 支持以下操作:++p,p++,*p。此外,两个正向迭代器可以互相赋值,还可以用 == 和 != 运算符进行比较。 2) 双向迭代器。双向迭代器具有正向迭代器的全部功能。除此之外,若 p 是一个双向迭代器,则 --p 和 p-- 都是有定义的。 --p 使得 p 朝和 ++p 相反的方向移动。 3) 随机访问迭代器。随机访问迭代器具有双向迭代器的全部功能。若 p 是一个随机访问迭代器,i 是一个整型变量或常量,则 p 还支持以下操作: p+=i:使得 p 往后移动 i 个元素。 p-=i:使得 p 往前移动 i 个元素。 p+i:返回 p 后面第 i 个元素的迭代器。 p-i:返回 p 前面第 i 个元素的迭代器。 p[i]:返回 p 后面第 i 个元素的引用。 此外,两个随机访问迭代器 p1、p2 还可以用 <、>、<=、>= 运算符进行比较。 p1<p2 的含义是:p1 经过若干次(至少一次) ++ 操作后,就会等于 p2

Python 中的迭代器 与 生成器

北战南征 提交于 2019-11-29 09:41:23
迭代器概述 : 迭代是访问集合元素的一种方式, 迭代器 是一个可以 记住遍历位置 的 对象 . 迭代器对象从集合的第一个元素开始访问, 直到所有的元素被访问结束, 迭代器 只能往前不会后退 判断一个对象是否可以迭代 : 可以使用 isinstance()来判断一个对象是否是 Interable 对象 from collections import Iterable isinstance([], Iterable) # []是要判断的数据类型或对象 可迭代对象的本质 : 可迭代对象通过__iter__方法向我们提供一个迭代器, 我们在迭代一个可迭代对象时, 实际上是先获取该对象提供的一个迭代器, 然后通过这个迭代器来依次获取对象中的每一个数据 如果想要一个对象成为: 一个 可迭代对象 , 那么 必须实现 __iter__ 方法 调用 iter(obj) 函数的时候, 只要__iter__方法返回一个迭代器即可(可以是自己, 也可以是其他对象)但要保证是一个 迭代器 , 即 包含 __iter__ 和 __next__ 方法 ) 一个 实现了 __iter__ 方法 和 __next__ 方法 的对象, 就是 迭代器 iter() 函数 与 next() 函数 : 我们可以通过 iter() 函数 获取 可迭代对象的 迭代器 。然后对获取到的迭代器不断使 用 next() 函数来

Python 迭代器和生成器

拟墨画扇 提交于 2019-11-29 09:38:48
迭代是重复反馈过程的活动,其目的通常是为了逼近所需目标或结果。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值。迭代是Python强大的功能之一,是访问集合元素的一种方式。迭代器是一个可以记住遍历位置的对象,在遍历字符串,列表或元组对象时非常有用。 一、迭代器 1、什么是可迭代对象 如果给定一个list或tuple,可以通过for循环来遍历这个list或tuple,这种遍历称为迭代(Iteration),被遍历的list或tuple被称为可迭代对象。除了list或tuple外,还有很多可以被迭代的对象,如str、set、tuple等。 >>> x = [100, 200, 300] >>> y = iter(x) >>> z = iter(x) >>> next(y) >>> next(y) >>> next(z) >>> next(z) >>> type(x) >>> type(y) 运行结果如下所示 这里x是一个可迭代对象,可迭代对象并不是指某种具体的数据类型,list是可迭代对象,dict是可迭代对象,set也是可迭代对象。y和x是两个独立的迭代器,迭代器内部有一个状态,改状态用于记录当前迭代所在的位置,以便下次迭代式获取正确的元素。 在python中,迭代使用过for...in来完成的。例如: for a in bb: print(a,

Iterator -迭代器

天大地大妈咪最大 提交于 2019-11-29 08:28:42
1 package cn.learn.collection; 2 3 import java.util.Collection; 4 import java.util.HashSet; 5 import java.util.Iterator; 6 7 /* 8 java.util.Iterator 9 迭代器:主要用于遍历访问collection,遍历前都会先判断集合是否为空 10 11 Iterator的对象 也被称为迭代器 12 Iterator是一个接口,需要使用Iterator接口的实现类对象 13 获取方法比较特殊,Collection中有个iterator()方法,返回的是Iterator的实现类 14 15 先用hasNext()判断有无元素,返回一个Boolean,再用next(),取出元素 16 */ 17 public class IteratorApi { 18 public static void main(String[] args) { 19 Collection<String> hs= new HashSet<>(); 20 hs.add("ni"); 21 hs.add("nn"); 22 hs.add("n1"); 23 hs.add("n1"); 24 hs.add("n2"); 25 System.out.println(hs); //[nn

C++进阶知识整理

我是研究僧i 提交于 2019-11-29 06:20:39
本基本知识整理及代码源于牛客网C++面试宝典导读,   网址 https://www.nowcoder.com/tutorial/93/7047559bae6c461582560f58175faa45   STL基本组成   容器、迭代器、分配器、算法、仿函数、配接器。   分配器给容器分配内存空间,算法通过迭代器获取容器中内容,仿函数协助算法完成各种操作,配接器用来套接适配仿函数。   vector和list   vector:   连续存储容器,动态数组,在堆上分配空间。   底层实现:数组。   两倍容量增长:   插入新元素时,如果超过容量,则会重新分配原有个数的两倍空间,将原空间元素赋值到新空间再增加新元素,最后析构并释放原空间, 之前的迭代器失效 。   适用:随机访问,不常在非尾节点插入删除。   List:   动态链表,在堆上分配空间。插入和删除都会分配或释放空间。   底层实现:双向链表。   适用:不能随机访问,只能快速访问头尾节点。   resize和reserve区别   resize:改变容器内含有元素的数量(size()),可以缩小。   reserve:改变当前容器的最大容量(capicity()),不能缩小。   map和set   map和set都是关联容器,底层实现都是红黑树。map和set的接口红黑树都提供了。   区别:   1.

Python迭代器和生成器

隐身守侯 提交于 2019-11-29 05:49:00
迭代器和 生成器都是访问集合元素的一种方式。 一、迭代器 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 字符串,列表或元组对象都可用于创建迭代器。 1、迭代器有两个基本的方法: iter() 创建迭代器对象 next() 输出迭代器的下一个元素 from collections.abc import Iterator s = '123' it1 = iter(s) print(isinstance(it1, Iterator)) #判断一个对象是否迭代器对象,输出:True print(next(it1)) #输出:1 print(next(it1)) #输出:2 print(next(it1)) #输出:3 #print(next(it1)) #超出范围会运行报错StopIteration li = [1,2,3] it2 = iter(li) print(next(it2)) #输出:1 print(next(it2)) #输出:2 print(next(it2)) #输出:3 it3 = iter(li) #用list可将迭代器转换为列表 print(list(it3)) 2、迭代器遍历的两种方式:for、while import sys s = '123' it1 = iter(s)

迭代器

可紊 提交于 2019-11-29 05:37:10
1. 迭代 根据记录的前面的元素的位置信息 去访问后续的元素的过程 -遍历 迭代 2. 可迭代对象 iterable   如何判断可迭代对象的3种方式 能够被迭代访问的对象 for in 常用可迭代对象-list tuple str from collections import Iterable isinstance(obj, Iterable) 3. 可迭代对象 可迭代对象通过__iter__方法提供一个 可以遍历对象中数据的工具-迭代器 iter(可迭代对象) 可以获取可迭代对象的迭代器 通过迭代器可以迭代访问 数据 next(迭代器) ===== 迭代器对象.__next__() """ 1 可迭代对象的本质 提供了一个迭代器(遍历可迭代对象中的数据) 2 如何获取可迭代对象中的迭代器 迭代器对象 = iter(可迭代对象) 3 如果通过迭代器访问可迭代对象中下一个元素 元素的值 = next(迭代器对象)                   如果迭代器遍历完成 抛出 停止迭代-异常StopIteration """ 如果需要实现一个迭代器 就需要实现__next__() 4. 迭代器 iterator -- 迭代器访问可迭代对象中数据 判断对象是否是迭代器类型 from collections import Iterator isinstance(obj,

PAT甲级题分类汇编——树

前提是你 提交于 2019-11-29 04:04:29
AVL树好难!(其实还好啦~) 我本来想着今天应该做不完树了,没想到电脑里有一份讲义,PPT和源代码都有,就一遍复习一遍 抄 码了一遍,更没想到的是编译一遍通过,再没想到的是运行也正常,最没想到的是一遍AC。 其实很多题都有数, std:: set 之类用的是红黑树,据说很复杂,比AVL树还要复杂的那种。但是,用到这些设施的题,都不在这一分类下,这一分类下的题,因为题目要求自己建树,也就不用标准库设施了。 大多数题中,树在内存中都是连续存放的。不是像完全二叉树那样的连续,是物理上连续而逻辑上用数组下表代替指针。 题号 标题 分数 大意 1053 Path of Equal Weight 30 寻找树中一定权重的路径 1064 Complete Binary Search Tree 30 完全二叉搜索树 1066 Root of AVL Tree 25 AVL树的根 1086 Tree Traversals Again 25 中序遍历逆推 1094 The Largest Generation 25 树中元素最多的层 1099 Build A Binary Search Tree 30 建立二叉搜索树 这一系列的题还是清一色地某姥姥出的。 学数据结构的时候做过1064和1086,遇到过1066,但跳过了。 这次除了1086和1094都写,毕竟不能放着30分题不管。30分题一遍AC

STL(九)---set和multiset

北慕城南 提交于 2019-11-29 03:22:54
简介 在头文件set>中定义 namespace std { template <typename T, typename Compare = less<T>, typename Allocator = allocator<T> > class set; template <typename T, typename Compare = less<T>, typename Allocator = allocator<T> > class multiset; } set和multiset都是关联容器,是有序的集合,集合中包含不可重复的、类型为Key的元素。排序通过使用类型为Compare的比较函数比较来实现。搜索,删除和插入操作具有对数时间复杂度。set和multiset通常都以红黑树实现。multiset相对set来说能够允许重复值的存在。 set和multiset不提供用来直接存取元素的任何操作函数 通过迭代器进行元素间存取,有一个限制:从迭代器角度看,元素值是常数。 set和multiset操作 构造、复制与析构 set c //默认构造函数;创建一个空set/multiset set c(op) //创建一个空set/multiset,并以op原则作为排序准则 set c(c2) //复制构造函数;创建一个新的set/multiset作为c2的副本(所有元素都被复制) set