add: 220425 [cpp]
This commit is contained in:
parent
31dc21bfa2
commit
94f0aa7091
|
|
@ -0,0 +1,75 @@
|
||||||
|
#include <vector>
|
||||||
|
|
||||||
|
/*
|
||||||
|
* 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 std::vector<int>& nums);
|
||||||
|
|
||||||
|
Iterator(const Iterator& iter);
|
||||||
|
|
||||||
|
// Returns the next element in the iteration.
|
||||||
|
int next();
|
||||||
|
|
||||||
|
// Returns true if the iteration has more elements.
|
||||||
|
bool hasNext() const;
|
||||||
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* 284. Peeking Iterator
|
||||||
|
* Design an iterator that supports the peek operation on an existing iterator in addition to the hasNext and the next operations.
|
||||||
|
*
|
||||||
|
* Implement the PeekingIterator class:
|
||||||
|
*
|
||||||
|
* PeekingIterator(Iterator<int> nums) Initializes the object with the given integer iterator iterator.
|
||||||
|
* int next() Returns the next element in the array and moves the pointer to the next element.
|
||||||
|
* boolean hasNext() Returns true if there are still elements in the array.
|
||||||
|
* int peek() Returns the next element in the array without moving the pointer.
|
||||||
|
* Note: Each language may have a different implementation of the constructor and Iterator, but they all support the int next() and boolean hasNext() functions.
|
||||||
|
*/
|
||||||
|
|
||||||
|
class PeekingIterator : public Iterator {
|
||||||
|
private:
|
||||||
|
int x = 0;
|
||||||
|
bool isEmpty = false;
|
||||||
|
|
||||||
|
public:
|
||||||
|
explicit PeekingIterator(const std::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.
|
||||||
|
if (!Iterator::hasNext())
|
||||||
|
isEmpty = true;
|
||||||
|
else
|
||||||
|
this->x = Iterator::next();
|
||||||
|
}
|
||||||
|
|
||||||
|
// Returns the next element in the iteration without advancing the iterator.
|
||||||
|
int peek() const {
|
||||||
|
return x;
|
||||||
|
}
|
||||||
|
|
||||||
|
// hasNext() and next() should behave the same as in the Iterator interface.
|
||||||
|
// Override them if needed.
|
||||||
|
int next() {
|
||||||
|
if (this->isEmpty)
|
||||||
|
return -1;
|
||||||
|
auto ret = this->x;
|
||||||
|
|
||||||
|
if (Iterator::hasNext()) {
|
||||||
|
this->x = Iterator::next();
|
||||||
|
} else {
|
||||||
|
this->isEmpty = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool hasNext() const {
|
||||||
|
return !this->isEmpty;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
@ -3,4 +3,4 @@ PROJECT(2204)
|
||||||
|
|
||||||
SET(CMAKE_CXX_STANDARD 23)
|
SET(CMAKE_CXX_STANDARD 23)
|
||||||
|
|
||||||
ADD_EXECUTABLE(2204 220424-CN.cpp)
|
ADD_EXECUTABLE(2204 220425.cpp)
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue