给定一个迭代器类的接口,接口包含两个方法: 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 顶端迭代器相关推荐

  1. LeetCode 284. 顶端迭代器

    1. 题目 给定一个迭代器类的接口,接口包含两个方法: next() 和 hasNext(). 设计并实现一个支持 peek() 操作的顶端迭代器 – 其本质就是把原本应由 next() 方法返回的元 ...

  2. 1.10 Iterator(迭代器)遍历集合元素

    Iterator(迭代器)遍历Collection集合元素 Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Ma ...

  3. Scala Iterator(迭代器)详解

    Scala Iterator(迭代器) Scala Iterator(迭代器)不是一个集合,它是一种用于访问集合的方法. 迭代器 it 的两个基本操作是 next 和 hasNext. 调用 it.n ...

  4. Iterator(迭代器)--对象行为模式

    Iterator(迭代器)–对象行为模式 一.意图 提供一种方法顺序访问一个聚合对象的各个元素,而又不需暴露该对象的内部结构. 二.动机 1.在软件构建过程中,集合对象内部结构常常变化各异.但对于这些 ...

  5. Iterator(迭代器)遍历Collection集合元素

    Iterator(迭代器)是一个接口,它的作用就是遍历容器的所有元素,也是 Java 集合框架的成员,但它与 Collection 和 Map 系列的集合不一样,Collection 和 Map 系列 ...

  6. es6 Iterator(迭代器)的概念

    Iterator(迭代器)的概念 JavaScript 原有的表示"集合"的数据结构,主要是数组(Array)和对象(Object),ES6 又添加了Map和Set.这样就有了四种 ...

  7. 迭代器Iterator列表迭代器ListIterator

    文章目录 一.迭代器Iterator 概述 基本操作 注意事项 二.列表迭代器ListIterator 概述 基本操作 注意事项 三.Iterator和ListIterator区别 一.迭代器Iter ...

  8. SE API第10/11天:集合 ——>ArrayListals、Iterator遍历迭代器、增强for、List集→subList、集合间转换asList、排序sort | Map相关

    一.Java 集合框架 0.介绍: (0)什么是集合 -集合与数组一样,可以保存一组元素,并且提供了操作元素的相关方法,使用更方便. (1)集合框架被设计成要满足以下几个目标: 该框架必须是高性能的. ...

  9. leetcode 284. Peeking Iterator | 284. 顶端迭代器(给 iterator 添加 peek 方法)

    题目 https://leetcode.com/problems/peeking-iterator/ 题解 一句话解释题意:标准的 iter 接口不包含 peek 功能,本题希望你能够增加这个功能. ...

  10. Iterator(迭代器)接口 --对象循环遍历

    <?php class MyIterator implements Iterator {private $var = array();public function __construct ( ...

最新文章

  1. Cassandra 概况
  2. 详解何恺明团队4篇大作 !(附代码)| 从特征金字塔网络、Mask R-CNN到学习分割一切
  3. WIN32获取进程当前目录
  4. EZ 2018 03 23 NOIP2018 模拟赛(五)
  5. 一些研究SLAM的团队和网站 [2008年10月20日]
  6. bootstrap-wysiwyg 结合 base64 解码 .net bbs 图片操作类 (三) 图片裁剪
  7. ant 改变表格数据_表格技巧—Excel表格怎么替换数字
  8. pg和oracle比较,Oracle与PostgreSQL使用差异对比与总结
  9. AOS编排语言系列教程(二):初识AOS编排语言,创建你的第一个AOS模板
  10. Android开发笔记(一百六十五)利用红外发射遥控电器
  11. Spring使用Cache、整合Ehcache
  12. Qt QDialog简介
  13. 简单介绍——【汇总统计数据】工具(ArcMap)
  14. Dynamics 365Online Server-Side OAuth身份认证二(S2S)
  15. c语言中char* 代表什么
  16. android 水波纹扩散动画,[Android]多层波纹扩散动画——自定义View绘制
  17. Uva 1151 Buy or Build 二进制枚举+最小生成树
  18. 假冒Macbook充电器拆解:外表令人信服但内部却非常危险
  19. BloomFilter原理学习
  20. 基于Dragonboard410c的智能音箱(四)

热门文章

  1. 中粮期货“以一战十”,三万手空单对决连豆多头
  2. 环境搭建 Day02
  3. Spring事务知识实践
  4. 洛谷题单 101【入门2】分支结构
  5. 御剑后台扫描免费下载
  6. jQuery实现鼠标移上弹出提示框,移出消失
  7. N95 轻松理财软件 轻便理财Sinew Software MR.Expense 1.03汉化版
  8. html中的css线条样式,详解CSS制作Web页面条纹背景样式的技巧
  9. OA系统分析报告:产品化+定制是发展方向
  10. WOWItemMaker希望之光专用版