- Peeking Iterator
class Iterator {
struct Data;
Data* data;
public:
Iterator(const vector<int>& nums);
Iterator(const Iterator& iter);
virtual ~Iterator();
int next();
bool hasNext() const;
};
class PeekingIterator : public Iterator {
private:
int nextNum;
bool ifHasNext;
public:
PeekingIterator(const vector<int>& nums) : Iterator(nums) {
ifHasNext = Iterator::hasNext();
if (ifHasNext) nextNum = Iterator::next();
}
int peek() {
return nextNum;
}
int next() {
int tmp = nextNum;
ifHasNext = Iterator::hasNext();
if (ifHasNext) nextNum = Iterator::next();
return tmp;
}
bool hasNext() const {
return ifHasNext;
}
};
class PeekingIterator : public Iterator
{
public:
PeekingIterator(const vector<int> &nums) : Iterator(nums)
{
}
int peek()
{
return Iterator(*this).next();
}
int next()
{
return Iterator::next();
}
bool hasNext() const
{
return Iterator::hasNext();
}
};