迭代器

集合的三种遍历方式

China☆狼群 提交于 2020-01-26 02:52:45
迭代器 /* 迭代器 遍历集合 迭代器Iterator 是一个接口 作用是绑定集合 迭代集合中的元素。 特殊之处: 在迭代期间可以移除迭代器指向的集合的元素 boolean hasNext() 检查集合列表中是否还有元素未进行遍历,检查的方式从第一个依次向后检查 Object next() 获得当前遍历到的元素 void remove() 从迭代器指向的 collection 中移除迭代器遍历到的当前元素。 【注意:如果使用迭代器遍历集合元素,迭代器必须依附于集合。 简单而言:有一个迭代器对象,就必须有一个与之关联的集合对象 】 【注意: 在迭代期间 集合本身不能操作移除功能】 */ import java.util.*; class IteratorDemo { public static void main(String[] args) { //System.out.println("Hello World!"); Collection c = new ArrayList(); c.add("蜡笔小新"); c.add(5); c.add("淘气"); // 将集合与迭代器绑定【】 Iterator ite = c.iterator(); while(ite.hasNext()){ // 获取集合中的元素 Object obj = ite.next(); System.out

C++STL概览

怎甘沉沦 提交于 2020-01-25 16:53:52
引言 C++ STL可以分为标准容器,算法和函数对象,迭代器和分配器,利用C++标准程序库,可以大量减少我们的代码,提高代码的稳定性和健壮性。 标准容器 C++标准容器分为序列容器和关联容器,对于序列容器,C++提供的基本序列有 vector 支持随机访问,不适合做插入和删除操作频繁的场景 list 双向链表,适合做元素的插入和删除,不是随机访问 deque 也是一个双端序列,但是经过优化,其双端操作效率类似list,随即访问效率接近vector。 从它们出发,通过定义适当的借口,生成了 stack 默认用deque实现 queue 默认是deque实现 priority_queue 默认是vector保存元素,实现最可能是heap 对于关联容器,C++提供的有: map 映射 mulitimap 多重映射,相比map,允许重复的key set 被看做是一个map,其中的值是无关紧要的 mulitiset 相比set,允许重复的key bitset 位集合 hash_map 散列映射,通过实现一个散列函数,将容器实现为一个散列表,以减少查找元素所需要的时间 标准容器具体用法可以参考C++在线手册STL容器: http://www.cplusplus.com/reference/stl/ 算法和函数对象 容器本身之所以有用,是因为容器提供了一些基本操作,如确定大小,迭代,复制,排序

【PAT】1008. 数组元素循环右移问题 (20)

折月煮酒 提交于 2020-01-25 16:47:11
1008. 数组元素循环右移问题 (20) 一个数组A中存有N(N>0)个整数,在不允许使用另外数组的前提下,将每个整数循环向右移M(M>=0)个位置,即将A中的数据由(A 0 A 1 ……A N-1 )变换为(A N-M …… A N-1 A 0 A 1 ……A N-M-1 )(最后M个数循环移至最前面的M个位置)。如果需要考虑程序移动数据的次数尽量少,要如何设计移动的方法? 输入格式: 每个输入包含一个测试用例,第1行输入N ( 1<=N<=100)、M(M>=0);第2行输入N个整数,之间用空格分隔。 输出格式: 在一行中输出循环右移M位以后的整数序列,之间用空格分隔,序列结尾不能有多余空格。 输入样例: 6 2 1 2 3 4 5 6 输出样例: 5 6 1 2 3 4 方法一:程序说明:  1.本题直接打印出需要的数组元素即可,不需要进行数组的移位  2.为了防止出现 m>=n 的情况,加入一句 m%=n,增加鲁棒性C++ 代码如下: 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 int main(){ 5 int m,n,i; 6 cin>>n>>m; 7 m %= n; 8 int num[n]; 9 for(i=0;i<n;i++) 10 cin>>num[i]; 11 for(i=n-m;i<n;i++

ES6:迭代器 Iterator

耗尽温柔 提交于 2020-01-25 06:32:49
迭代器是一个统一的接口,也可以叫遍历器 它的作用是使各种数据结构可被便捷的访问,它是通过一个键为Symbol.iterator 的方法来实现 定义一个数组: const people = [ 'Tom' , 'Jerry' , 'Mario' , 'Yoshi' ] ; 在控制台打印它,会发现它具有这样一个属性: 可以进行这样的操作: const people = [ 'Tom' , 'Jerry' , 'Mario' , 'Yoshi' ] ; const it = people [ Symbol . iterator ] ( ) ; 有两个参数,当遍历到底时,done就会变为true 可迭代的数据结构 主要的可以迭代的集合对象主要为三类:Array,Map,Set 普通的对象是无法迭代的 Array的entries()方法 数组有一个 entries() 方法,它会返回一个迭代器: 然后就可以使用next方法了: 值得注意的是:它返回的value是一个数组,分别包含索引和属性值 Array的keys()方法 keys() 方法返回的也是迭代器,而它的value是索引: Array的values()方法 values() 方法也会返回迭代器,它的value就是属性值: 来源: CSDN 作者: 苦呀君 链接: https://blog.csdn.net/weixin

C++ Primer 学习笔记 第三章字符串、向量和数组

回眸只為那壹抹淺笑 提交于 2020-01-25 04:50:15
using声明后就可以不使用作用域操作符了,如: std :: cin ; 等价于 : using std :: cin ; //声明后再用cin时就不用加前缀了 cin ; 每个using声明引入命名空间中的一个成员,但也可以指定变量所在的命名空间: using namespace std ; 头文件不应包含using声明,因为头文件内容会拷贝到所有引用了它的文件中,那么每个使用了该头文件的文件都会有这个声明,有时会产生名字冲突。 标准库类型string表示可变长的字符序列,使用前要先包含string头文件,string定义在命名空间std中。 初始化string方式: string s1 ; //默认初始化,s1是空字符串 string s2 = s1 ; //s2是s1的副本 string s3 = "hiya" ; //s3是该字面值去掉最后的'\0'的副本 string s4 ( 10 , 'c' ) ; //s4是cccccccccc string s5 ( s1 ) ; //与s2方式初始化方式等价 string s6 ( "hiya" ) ; //与s3初始化方式等价 拷贝初始化:用=初始化 直接初始化:不用=初始化 string s1 = "hiya" ; //拷贝初始化 string s2 ( "hiya" ) ; //直接初始化 string s3 ( 10

python中迭代器的原理与使用

北城余情 提交于 2020-01-25 01:14:29
python中,一个类只要实现了 __iter__() 方法,则称其为可迭代的,如果其又实现了 next() 方法(在python3中为__next__()方法,本文中不再进行说明),则可称其为迭代器。其中, __iter()__ 方法的用途是返回一个迭代器,并通过返回的迭代器的 next() 来迭代所需的容器。 迭代器的用处,主要是用来遍历一个我们需要的容器,如我们常见的for in循环,通过对于我们自己写的类添加迭代的方法,便可以使得我们的自定义的类可以像内置的列表一样,方便地通过for in来直接遍历。 以下是一个比较简单的迭代器的使用方法。 首先,假设我们有一个类 MyArray ,其中有一个字符串的列表 self.elements class MyArray ( object ) : def __init__ ( self ) : self . elements = [ "e1" , "e2" , "e3" ] self . len = len ( self . elements ) 这时,我们知道,我们是无法直接遍历 MyArray 的,只能通过访问其中的元素来实现。这时,我们可以通过一种简单的方法来使得 MyArray 变成一个可迭代的类。 class MyArray ( object ) : def __init__ ( self ) : self .

Java--Iterator迭代器

一个人想着一个人 提交于 2020-01-24 21:50:53
Iterator迭代器 使用Iterator接口遍历集合元素 Iterator对象成为迭代器(设计模式的一种)主要用于遍历Collection集合的元素。 Iterator仅用于遍历集合 集合对象每次调用iterator()方法都得到一个全新的迭代对象 集合元素的遍历操作,使用迭代器Iterator()接口: 1,内部的方法:hasNext()和next() 2,集合对象每次调用iterator()方法都得到一个全新的迭代器对象 默认游标都在集合的第一个元素之前 @Test public void test1 ( ) { Collection coll = new ArrayList ( ) ; coll . add ( 123 ) ; coll . add ( 456 ) ; coll . add ( new String ( "Tom" ) ) ; coll . add ( false ) ; coll . add ( new Person ( "Tom" , 20 ) ) ; Iterator iterator = coll . iterator ( ) ; // 方法一:不推荐 // System.out.println(iterator.next()); // System.out.println(iterator.next()); // System.out

Python核心编程学习日记之条件和循环

丶灬走出姿态 提交于 2020-01-24 19:52:20
第8章: 条件和循环 if语句 格式:if expression: expr_true_suite else语句 格式:if expression: expr_true_suite else: expr_false_suite Python的缩进使用强制使代码正确对齐,避免出现“悬挂else”的问题 elif语句 可以使用序列和成员关系操作符,或者Python字典来替换大段的if_elif_else语句 条件表达式(三元操作符) 模拟三元表达式的一种方法:(C and [X] or [Y])[0]. 具体实现原理参照该篇博客。and和or的返回值是决定其值的操作数 Python2.5将语法确定为:X if C else Y while语句,for语句 for循环会访问一个可迭代对象(例如序列或是迭代器)中的所有元素,在所有条目都处理过后结束循环 迭代序列基本方法:通过序列项迭代;通过序列索引迭代;使用项和索引迭代,调用enumerate()函数 for循环访问迭代器:迭代器对象有一个next()方法,所有条目迭代完成后,迭代器引发一个StopIteration异常,for语句在内部调用next()捕获异常 range()完整语法:range(start, end, step = 1),不包括end range()简略语法:range(end)或者range(start,end)

标准模板库STL介绍

醉酒当歌 提交于 2020-01-24 11:01:49
库是一系列程序组件的集合,他们可以在不同的程序中重复使用。C++语言按照传统的习惯,提供了由各种各样的函数组成的库,用于完成诸如输入/输出、数学计算等功能。 1. STL介绍 标准模板库STL是当今每个从事C++编程的人需要掌握的技术,所有很有必要总结下 本文将介绍STL并探讨它的三个主要概念:容器、迭代器、算法。 STL的最大特点就是: 数据结构和算法的分离,非面向对象本质。访问对象是通过象指针一样的迭代器实现的; 容器是象链表,矢量之类的数据结构,并按模板方式提供; 算法是函数模板,用于操作容器中的数据。由于STL以模板为基础,所以能用于任何数据类型和结构。 容器可以分为三种主要类型: 序列容器、关联容器、容器适配器。 每种STL容器都具有相关联的成员函数,这些成员函数的一个子集在所有的STL容器中都定义了。 STL迭代器的属性和指针类似,程序可以利用迭代器操作STL容器中的元素 STL算法是用于执行常见数据操作的函数,这些操作包括搜索、排序和比较元素,STL提供了大约70种算法,其中大多数算法都使用迭代器来访问容器元素。 1.1 容器简介 容器可以分为三种:序列容器、关联容器、容器适配器。 序列容器 :vector deque list Vector:可从后端执行快速的插入和删除,直接访问任何元素 Deque:从前面或后面执行快速的插入和删除,直接访问任何元素 List

map映射

两盒软妹~` 提交于 2020-01-23 11:01:59
Map是STL的一个关联容器,它提供一对一(其中第一个可以称为关键字,每个关键字只能在map中出现一次,第二个可能称为该关键字的值)的数据 处理能力,由于这个特性,它完成有可能在我们处理一对一数据的时候,在编程上提供快速通道。这里说下map内部数据的组织,map内部自建一颗红黑树(一 种非严格意义上的平衡二叉树),这颗树具有对数据自动排序的功能,所以在map内部所有的数据都是有序的 >对于迭代器来说, 可以修改实值,而不能修改key < 根据key值快速查找记录,查找的复杂度基本是Log(N) ,如果有1000个记录,最多查找10次,1,000,000个记录,最多查找20次。 1、头文件:#include<map> 2、定义:例如: map< int, string> personnel; 3、数据插入: A、用insert函数插入pair数据//只能创建但不能覆盖已存在的key所对应的value 1 map<int, string> mapStudent; 2 3 mapStudent.insert(pair<int, string>(1, "student_one")); 4 5 mapStudent.insert(pair<int, string>(2, "student_two")); 6 7 mapStudent.insert(pair<int, string>(3,