【ThinkingInJava】23、反向迭代器

/**
* 书本:《Thinking In Java》
* 功能:我们希望在默认的向前迭代器的基础上,添加产生反向迭代器的能力。
* 文件:AdapterMethodIdiom.java
* 时间:2015年4月8日19:59:01
* 作者:cutter_point
*/
package Lesson11holdingyourobjects;

import java.util.*;

class ReversibleArrayList<T> extends ArrayList<T>
{

	public ReversibleArrayList(Collection<T> c) { super(c);	}

	public Iterable<T> reversed()
	{
		return new Iterable<T>()		//第一个匿名的内部类
		{
			@Override
			public Iterator<T> iterator() 	//Iterable里面的必须实现的方法
			{
				return new Iterator<T>()		//返回值是第二个匿名内部类
				{
					int current = size() - 1;	//这个size是ArrayList里面的函数,继承过来的

					@Override
					public boolean hasNext()
					{
						return current > -1;
					}

					@Override
					public T next()
					{
						return get(current--); 	//这个是向前推进的
					}

					@Override
					public void remove()
					{
						throw new UnsupportedOperationException();
					}

				};

			}

		};
	}

}

public class AdapterMethodIdiom
{
	public static void main(String [] args)
	{
		ReversibleArrayList<String> ral = new ReversibleArrayList<String>(Arrays.asList("To be or not to be".split(" ")));

		for(String s : ral)
			System.out.print(s + " ");
		System.out.println();
		//向前遍历
		for(String s : ral.reversed())
			System.out.print(s + " ");
	}

}

预览:

To be or not to be

be to not or be To

时间: 2024-11-03 05:40:57

【ThinkingInJava】23、反向迭代器的相关文章

list反向输出 反向迭代器

反向迭代器(rbegin,rend) c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素 c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素前面的位置 每一个容器里面都有Iterator(迭代器),可以从容器的begin位置到end位置,通过++来遍历.同样也有个反向迭代器reverse_iterator,从rbegin(=end-1)到rend(=begin-1)反向遍历,仍然通过++.可见能反向迭代的容器,应该是一个双向链表. 回想一下,所有容器都定义了 beg

反向迭代器

C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示.这两个迭代器通常用于标记包含容器中所有元素的迭代范围. c.begin() 返回一个迭代器,它指向容器c的第一个元素 c.end() 返回一个迭代器,它指向容器c的最后一个元素的下一个位置 c.rbegin() 返回一个逆序迭代器,它指向容器c的最后一个元素 c.rend() 返回一个逆序迭代器,它指向容器c的第一个元素

使用__iter__ , 和__reversed__ 实现正、反向迭代器

内置的iter(), reversed()函数可以进行正反向迭代,如果需要定制正反向迭代,要怎么做呢? 事实上iter函数是调用的__iter__方法, reversed,则是调用的__reversed__方法,那么只需要 重写这两个方法即可: 这里演示反向输出浮点列表: #!/usr/bin/env python #coding:utf-8 #@Author:Andy # iter() 使用的是__iter__方法 # reversed() 使用的是__reversed__ 方法 # 所以如果

【C++】反向迭代器(rbegin,rend)(转载)

转自:http://blog.csdn.net/kjing/article/details/6936325 rbegin和rend,很有用! C++ primer (中文版第四版)第273页 9.3.2 begin和end成员 begin和end操作产生指向容器内第一个元素和最后一个元素的下一个位置的迭代器,如下所示.这两个迭代器通常用于标记包含容器中所有元素的迭代范围. c.begin() 返回一个迭代器,它指向容器c的第一个元素 c.end() 返回一个迭代器,它指向容器c的最后一个元素的下

leetcode_67题——Add Binary(字符串string,反向迭代器reverse_iterator,栈stack)

Add Binary Total Accepted: 39288 Total Submissions: 158078My Submissions Question Solution Given two binary strings, return their sum (also a binary string). For example,a = "11"b = "1"Return "100". Hide Tags Math String Have

设计模式(23)---迭代器模式

定义: 迭代器模式,提供了一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示. 因为迭代器模式的广泛运用,现在高级语言如c#,java等本身已经把这个模式封装在语言当中.例如:c#中的foreach in. 因此此处暂不对迭代器模式做详细的介绍,下面简单讲述在书中看到的一些基础知识: IEumerator支持对非泛型集合的简单迭代接口. public interface IEumerator { object Current { get; } bool MoveNext(); v

一元多项式的乘法与加法运算 【STL-map哈希-map反向迭代器遍历 + 零多项式】

设计函数分别求两个一元多项式的乘积与和. 输入格式: 输入分2行,每行分别先给出多项式非零项的个数,再以指数递降方式输入一个多项式非零项系数和指数(绝对值均为不超过1000的整数).数字间以空格分隔. 输出格式: 输出分2行,分别以指数递降方式输出乘积多项式以及和多项式非零项的系数和指数.数字间以空格分隔,但结尾不能有多余空格. 输入样例: 4 3 4 -5 2 6 1 -2 0 3 5 20 -7 4 3 1 输出样例: 15 24 -25 22 30 21 -10 20 -21 8 35 6

10.4 再探迭代器-插入/IO/反向

10.4.1 插入迭代器 插入迭代器接受一个容器,生成一个迭代器,通过向该迭代器赋值可以实现向容器添加元素 (1)back_inserter: 接受一个参数, 示例: auto iter = back_inserter(iVec): iter = value: (2)front_inserter: 接受一个参数, 示例: auto iter = front_inserter(iVec): iter = value: (3)inserter: 接受两个参数,示例:auto iter = inser

模拟实现简化版List迭代器&amp;嵌入List

1.迭代器(iterators)概念(1)迭代器是一种抽象的设计概念,其定义为:提供一种方法,使他能够按顺序遍历某个聚合体(容器)所包含的所有元素,但又不需要暴露该容器的内部表现方式. (2)迭代器是一种行为类似智能指针的对象, 而指针最常见的行为就是内 容提领和成员 访问. 因此迭代器最重要的行为就是对operator*和operator->进行重载. (3)STL的中心思想在于: 将数据容器和算法分开, 彼此独立设计, 最后再以一贴胶合剂( iterator) 将它们撮合在一起.STL的迭代