题目大意: 继承一个Iterator类,实现对下一个int元素的预览功能,想办法保持迭代器的位置。
C++中peek()函数: istream::peek()
// 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), is_peeked(false), peeked_value(0) {
// Initialize any member here.
// **DO NOT** save a copy of nums and manipulate it directly.
// You should only use the Iterator interface methods.
}
// Returns the next element in the iteration without advancing the iterator.
int peek() {
if (!is_peeked && Iterator::hasNext()) {
peeked_value = Iterator::next(); // save a next() element
is_peeked = true;
}
return peeked_value;
}
// hasNext() and next() should behave the same as in the Iterator interface.
// Override them if needed.
int next() {
if (is_peeked) {
is_peeked = false;
return peeked_value;
}
return Iterator::next();
}
bool hasNext() const {
if (is_peeked) {
return true;
}
return Iterator::hasNext();
}
private :
bool is_peeked;
int peeked_value;
};
子类覆盖过的父类函数,子类里面要调用这些函数可以用 ::,新技能又get了。