Peeking Iterator 顶端迭代器
给定一个迭代器类的接口,接口包含两个方法: next()
和 hasNext()
。设计并实现一个支持 peek()
操作的顶端迭代器 -- 其本质就是把原本应由 next()
方法返回的元素 peek()
出来。
示例:
假设迭代器被初始化为列表[1,2,3]
。调用next()
返回 1,得到列表中的第一个元素。现在调用peek()
返回 2,下一个元素。在此之后调用next()
仍然返回 2。最后一次调用next()
返回 3,末尾元素。在此之后调用hasNext()
应该返回 false。
进阶:你将如何拓展你的设计?使之变得通用化,从而适应所有的类型,而不只是整数型?
思路:PeekingIterator是自定义的迭代器,是对顶层迭代器Iterator的封装。所以对于next ()方法和hasNext () 方法其实已经封装好了,我们不需要再写,我们需要的只是重新在Iterator的基础上增加peek ()方法。这点很重要,一开始我以为要自己实现next ()方法和hasNext () 。
所以这道题的核心思想和解决方法就是增加一个缓存cache用来存储peek的值,并且用一个bool类型的变量来标识cache是否已经被赋值。
参考代码:
// Below is the interface for Iterator, which is already defined for you.
// **DO NOT** modify the interface for Iterator.
class Iterator {struct Data;Data* data;
public:Iterator(const vector<int>& nums);Iterator(const Iterator& iter);virtual ~Iterator();// Returns the next element in the iteration.int next();// Returns true if the iteration has more elements.bool hasNext() const;
};class PeekingIterator : public Iterator {
public:PeekingIterator(const vector<int>& nums) : Iterator(nums) {// Initialize any member here.// **DO NOT** save a copy of nums and manipulate it directly.// You should only use the Iterator interface methods.hasPeeked = false;}// Returns the next element in the iteration without advancing the iterator.int peek() {if (!hasPeeked) {cache = Iterator::next();hasPeeked = true;}return cache;}// hasNext() and next() should behave the same as in the Iterator interface.// Override them if needed.int next() {if (hasPeeked) {hasPeeked = false;return cache;}else {return Iterator::next();}}bool hasNext() const {if (hasPeeked) return true;return Iterator::hasNext();}
private:bool hasPeeked;int cache;
};
Peeking Iterator 顶端迭代器相关推荐
- LeetCode 284. 顶端迭代器
1. 题目 给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext(). 设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元 ...
- 1.10 Iterator(迭代器)遍历集合元素
Iterator(迭代器)遍历Collection集合元素 Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Ma ...
- Scala Iterator(迭代器)详解
Scala Iterator(迭代器) Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法. 迭代器 it 的两个基本操作是 next 和 hasNext. 调用 it.n ...
- Iterator(迭代器)--对象行为模式
Iterator(迭代器)–对象行为模式 一.意图 提供一种方法顺序访问一个聚合对象的各个元素,而又不需暴露该对象的内部结构. 二.动机 1.在软件构建过程中,集合对象内部结构常常变化各异.但对于这些 ...
- Iterator(迭代器)遍历Collection集合元素
Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列 ...
- es6 Iterator(迭代器)的概念
Iterator(迭代器)的概念 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就有了四种 ...
- 迭代器Iterator列表迭代器ListIterator
文章目录 一.迭代器Iterator 概述 基本操作 注意事项 二.列表迭代器ListIterator 概述 基本操作 注意事项 三.Iterator和ListIterator区别 一.迭代器Iter ...
- SE API第10/11天:集合 ——>ArrayListals、Iterator遍历迭代器、增强for、List集→subList、集合间转换asList、排序sort | Map相关
一.Java 集合框架 0.介绍: (0)什么是集合 -集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便. (1)集合框架被设计成要满足以下几个目标: 该框架必须是高性能的. ...
- leetcode 284. Peeking Iterator | 284. 顶端迭代器(给 iterator 添加 peek 方法)
题目 https://leetcode.com/problems/peeking-iterator/ 题解 一句话解释题意:标准的 iter 接口不包含 peek 功能,本题希望你能够增加这个功能. ...
- Iterator(迭代器)接口 --对象循环遍历
<?php class MyIterator implements Iterator {private $var = array();public function __construct ( ...
最新文章
- Cassandra 概况
- 详解何恺明团队4篇大作 !(附代码)| 从特征金字塔网络、Mask R-CNN到学习分割一切
- WIN32获取进程当前目录
- EZ 2018 03 23 NOIP2018 模拟赛(五)
- 一些研究SLAM的团队和网站 [2008年10月20日]
- bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
- ant 改变表格数据_表格技巧—Excel表格怎么替换数字
- pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结
- AOS编排语言系列教程(二):初识AOS编排语言,创建你的第一个AOS模板
- Android开发笔记(一百六十五)利用红外发射遥控电器
- Spring使用Cache、整合Ehcache
- Qt QDialog简介
- 简单介绍——【汇总统计数据】工具(ArcMap)
- Dynamics 365Online Server-Side OAuth身份认证二(S2S)
- c语言中char* 代表什么
- android 水波纹扩散动画,[Android]多层波纹扩散动画——自定义View绘制
- Uva 1151 Buy or Build 二进制枚举+最小生成树
- 假冒Macbook充电器拆解:外表令人信服但内部却非常危险
- BloomFilter原理学习
- 基于Dragonboard410c的智能音箱(四)