284. 顶端迭代器
请你设计一个迭代器,除了支持 hasNext 和 next 操作外,还支持 peek 操作。
实现 PeekingIterator 类:
PeekingIterator(int[] nums) 使用指定整数数组 nums 初始化迭代器。
int next() 返回数组中的下一个元素,并将指针移动到下个元素处。
bool hasNext() 如果数组中存在下一个元素,返回 true ;否则,返回 false 。
int peek() 返回数组中的下一个元素,但 不 移动指针。
示例:
输入:
["PeekingIterator", "next", "peek", "next", "next", "hasNext"]
[[[1, 2, 3]], [], [], [], [], []]
输出:
[null, 1, 2, 2, 3, false]
知识学点:
- 如何继承class父类,用::
- 如果想调用class A中的成员变量a,那么就写成A::a
- 表示作用域,和所属关系,比如:
class A { public: int test(); // 只是声明,但是没具体写函数,在下面下 } int A::test()//表示test是属于A的 ,写Class A中test函数的具体内容! { return 0; }
代码:
class PeekingIterator : public Iterator { //这里peekingiteror继承了父类Iterator,该父类自带next()和hasnext()函数!!! private: bool flag; int nextnum;
public: PeekingIterator(const vector<int>& nums) : Iterator(nums) { flag=Iterator::hasNext(); // 调用父类的函数,得到bool解 if(flag) nextnum=Iterator::next(); // 调用父类的函数,得到下一个值 } int peek() { return nextnum; } int next() { int res=nextnum; flag=Iterator::hasNext(); // 移动指针 if(flag) nextnum=Iterator::next(); return res; } bool hasNext() const { return flag; } };