迭代器

java迭代器

谁说我不能喝 提交于 2019-12-23 09:54:53
1. I terator 迭代器是一个对象,它的工作是遍历并选择序列中的对象。客户端程序员不关心序列底层的结构。此外,迭代器通常被称为“轻量级”对象:创建它的代价小。因此,经常可以见到对迭代器有些奇怪的限制。 Java 的Iterator 就是迭代器受限制的例子,只能单向移动,它只能用来: a)使用方法 iterator()要求容器返回一个 Iterator。第一次调用Iterator 的next()方法时,它返回序列的第一个元素。 b)使用next()获得序列中的下一个元素。 c)使用hasNext()检查序列中是否还有元素。 d)使用remove()将上一次返回的元素从迭代器中移除。 public class JavaIterator { public static void main(String[] args) { List<Integer> list = Arrays.asList(16, 17, 18, 19, 20); List<Integer> arrayList = new ArrayList<Integer>(list); /*在使用Arrays.asList()后调用add,remove这些method时 出现java.lang.UnsupportedOperationException异常。 这是由于Arrays.asList() 返回java.util

【Java】Iterator迭代器总结

让人想犯罪 __ 提交于 2019-12-23 09:54:20
迭代器是一个对象,它的工作时遍历并选择序列中的对象,而客户端程序员不必知道或关心该序列底层的结构,此外,迭代器通常被称为轻量级对象:创建它的代价小。因此,经常可以见到对迭代器有些奇怪的限制,例如Java的Iterator只能单向移动,这个Iterator只能用来: (1)使用方法iterator()要求容器返回一个Iterator。Iterator将准备好返回序列的第一个元素。 (2)使用next()获得序列中下一个元素。 (3)使用hashnNext()检查序列中是否还有元素。 (4)使用remove()将迭代器新近返回的元素删除。 List<Pet> pets=Pets.arrayList(12); Iterator<Pet> it=pets.iterator(); while(it.hashNext()){ Pet p=it.next(); System.out.print(p); }  有了Iterator就不必为容器中元素的数量操心了,那是hashNext()和next()关心的事情了。  如果只是向前遍历List,并不打算修改List对象本身,那么那可以看到foreach语法会显得更加简洁。 foreach(Pet p: pets){ System.out.print(p); } Iterator还可以移除由next()产生的最后一个元素,这意味着在调用remove(

java iterator(迭代器)

夙愿已清 提交于 2019-12-23 09:54:06
任何容器类,都必须有某种方式可以插入元素并将它们再次取出,毕竟持有事物是容器最基本的工作,对于List,add()插入fang,get()取出,如果从更高层的角度思考,会发现这里有个确定:要用容器,必须对容器的确切类型编程,这样如果原本是List编码的,但是后来要应用于Set,那么此时该怎么办,是重写通用代码还是如何 迭代器(也是一种设计模式)的概念可用于达成这个目的,迭代器是一个对象,它的工作是遍历并选择序列中 对象,而客服端程序员不必关心或知道该序列的底层结构,此外迭代器通常被称为轻量级对象:创建它的代价很小. 因此经常可以见到对迭代器有些奇怪的限制;例如,Java的Iterator只能单向移动,这个Iterator只能用来: 1)使用方法iterator()要求容器返回一个Iterator. Iterator将准备好返回序列的第一个元素 2)使用next()获得序列中的下一个元素 3)使用hasNext()检查序列中是否还有元素 4)使用remove()将迭代器新近返回的元素删除 (必须先调用next()) package java.util; import java.util.function.Consumer; public interface Iterator<E> { boolean hasNext(); //检查是否有下一个元素 E next(); /

STL顺序容器vector、deque、list

梦想的初衷 提交于 2019-12-23 09:08:39
1.可变长动态数组 vector vector 支持随机访问迭代器,所有 STL 算法都能对 vector 进行操作,使用 vector,需要包含头文件vector vector 容器中,根据下标随机访问某个元素的时间是常数,假设a是某个vector类型的对象,可以用a[n]或者a.at(n)访问随机位置。 在尾部添加一个元素的时间大多数情况下也是常数,在遇到空间不足需要重新分配内存空间时,把原有内容复制过去后再添加新的元素。碰到这种情况,添加新元素所花的时间就不是常数,而是和数组中的元素个数成正比。 遇到在中间插入或删除元素时,因为要移动多个元素,平均花费的时间和容器中的元素个数成正比 vector常用的成员函数 成员函数 作 用 vector() 无参构造函数,将容器初始化为空 vector(int n) 将容器初始化为有 n 个元素 vector(int n, const T & val) 假定元素的类型是 T,此构造函数将容器初始化为有 n 个元素,每 个元素的值都是 val vector(iterator first, iterator last) first 和 last 可以是其他容器的迭代器。一般来说,本构造函数初始化的结果就是将 vector 容器的内容变成与其他容器上的区间 [first, last) —致 void clear() 删除所有元素 bool

迭代器

依然范特西╮ 提交于 2019-12-22 12:28:26
1.插入迭代器     |back_inserter:创建使用push_back实现末端插入的迭代器。   |front_inserter:使用push_front实现前端插入。(vector或其他没有push_front运算的容器上不能使用)   |inserter:使用insert实现指定位置插入操作,除了所关联的容器外,inserter还带有第二个实参:指向插入起始位置的迭代器。 2.iostream迭代器(iostream不是容器,但是标准库同样提供了在iostream对象上使用的迭代器)   |istream_iterator:用于读取输入流。   |ostream_iterator:用于写输出流。 3.反向迭代器(支持--和++操作的迭代器都可以定义反向迭代器)   |reserve_iterator:vec.rbegin()返回容器vec的最后一个元素的迭代器;vec.rend()返回容器vec的第一个元素的前一个元素的迭代器。 4.const迭代器   |const_iterator:避免使用迭代器来修改容器中的元素。 来源: https://www.cnblogs.com/qiushuixiaozhanshi/p/5630617.html

Java ArrayList小记

浪尽此生 提交于 2019-12-22 11:34:45
1.基本用法   ArrayList是一个泛型容器,新建ArrayList需要实例化泛型参数,比如: ArrayList<String> StrList = new ArrayList<>(); ArrayList<Integer> intList = new ArrayList<>();   ArrayList的主要方法有: // 添加元素到末尾 public boolean add(E e) // 判断是否为空 public boolean isEmpty() // 获取大小 public int size() // 获取指定位置(索引)的元素 public E get(int index) // 查找指定元素,若找到,返回索引位置,否则返回-1 public int indexOf(Object o) // 从后往前找 public int lastIndexOf(Object o) // 判断是否包含指定元素,根据equals方法的返回值 public boolean contains(Object o) // 删除指定位置的元素,返回值为被删除的元素对象 public E remove(int index) // 删除指定元素,只删除第一个相同的元素,若o为null,则删除值为null的元素 public boolean remove(Object o) // 清空元素

STL vector简介

荒凉一梦 提交于 2019-12-22 11:34:27
STL vector简介 vector(向量): C++中的一种数据结构,确切的说是一个类.它相当于一个动态的数组,当程序员无法知道自己需要的数组的规模多大时,用其来解决问题可以达到最大节约空间的目的. 用法: 1.文件包含: 首先在程序开头处加上#include<vector>以包含所需要的类文件vector 还有一定要加上using namespace std; 2.成员函数 1.push_back 在数组的最后添加一个数据 2.pop_back 去掉数组的最后一个数据 3.at 得到编号位置的数据 4.begin 得到数组头的指针 5.end 得到数组的最后一个单元+1的指针 6.front 得到数组头的引用 7.back 得到数组的最后一个单元的引用 8.max_size 得到vector最大可以是多大 9.capacity 当前vector分配的大小 10.size 当前使用数据的大小 11.resize 改变当前使用数据的大小,如果它比当前使用的大,者填充默认值 12.reserve 改变当前vecotr所分配空间的大小 13.erase 删除指针指向的数据项 14.clear 清空当前的vector 15.rbegin 将vector反转后的开始指针返回(其实就是原来的end-1) 16.rend 将vector反转构的结束指针返回(其实就是原来的begin-1)

C++ STL总结

谁说我不能喝 提交于 2019-12-22 05:14:13
STL概述 STL (Standard Template Library, 标准模板库) 是惠普实验室开发的一系列软件的统称。主要核心分为三大部分:容器(container)、算法(algorithm)和迭代器(iterator),另外还有容器适配器(container adaptor)和函数对象(functor)等其它标准组件。 容器: 顺序容器: 名称 特性 vector 模拟的数据结构式动态数组,在内存中是连续储存的,支持随机存取,支持在 尾部 快速插入和删除元素,搜索速度较慢 deque 称为双端队列,在内存中的储存方式是小片连续,每片之间用链表连接起来,支持随机存取,支持在 头部和尾部 快速插入和删除元素,搜索速度较慢 list 称为双向链表,在内存中的储存是不连续的,每个元素的内存之间用指针相连, 不支持 随机存取(因为要从首或尾遍历至指定位置),但是支持在 任意位置 快速插入和删除元素,搜索速度 最慢 ,扩展内存时无需复制和拷贝原元素 array 称为静态数组,在内存中是连续储存的,支持随机存取,不支持插入或删除元素 forward_list 称为前向链表,在内存中的储存是不连续的,同list一样支持在任意位置快速插入和删除元素,不支持随机存取,搜索速度也较慢,与list最大的区别在于其只能从头部遍历至尾部,不能反向遍历,因此没有保存后向指针,比list更省内存

C++ STL算法系列2---find ,find_first_of , find_if , adjacent_find的使用

主宰稳场 提交于 2019-12-22 02:11:10
一.find运算 假设有一个int型的vector对象,名为vec,我们想知道其中 是否包含某个特定值 。 解决这个问题最简单的方法时使用标准库提供的find运算: 1 // value we'll look for 2 int search_value = 42; 3 4 //call find to see if that value is present 5 vector<int>::const_iterator result = find(vec.begin() , vec.end() , search_value); 6 7 //report the result 8 cout<<"The value "<<search_value 9 <<(result == vec.end() ? " is not present" : "is present") 10 <<endl; 具体实现代码: 1 #include<iostream> 2 #include<vector> 3 #include<algorithm> 4 using namespace std; 5 6 int main() 7 { 8 // value we'll look for 9 int search_value = 42; 10 int ival; 11 vector<int> vec; 12 13

C++ STL基本容器的使用

僤鯓⒐⒋嵵緔 提交于 2019-12-21 21:05:52
  C++中有两种类型的容器:顺序容器和关联容器。顺序容器主要有vector、list、deque等。其中vector表示一段连续的内存,基于数组实现,list表示非连续的内存,基于链表实现,deque与vector类似,但是对首元素提供插入和删除的双向支持。关联容器主要有map和set.map是key-value形式,set是单值。map和set只能存放唯一的key,multimap和multiset可以存放多个相同的key.   容器类自动申请和释放内存,因此无需new和delete操作。   一、vector   vector基于模板实现,需包含头文件vector.   1.定义和初始化   //1.定义和初始化   vector vec1; //默认初始化,vec1为空   vector vec2(vec1); //使用vec1初始化vec2   vector vec3(vec1.begin(),vec1.end());//使用vec1初始化vec2   vector vec4(10); //10个值为的元素   vector vec5(10,4); //10个值为的元素   //2.常用操作方法   vec1.push_back(100); //添加元素   int size = vec1.size(); //元素个数   bool isEmpty = vec1