来源:一亩三分地
原帖:http://www.fgdsb.com/2015/01/25/peek-iterator/
题目:
写一个PeekIterator,包装一个普通的Iterator,要实现peek()方法,返回当前iterator指向的元素,但是不能移动它。除此之外也要实现has_next()和next()方法。
PeekIterator可以用普通iterator的get_next()来获得,但是要记录下来,下一次调用get_next的时候直接返回上一次peek的即可。
代码:
原帖:http://www.fgdsb.com/2015/01/25/peek-iterator/
题目:
写一个PeekIterator,包装一个普通的Iterator,要实现peek()方法,返回当前iterator指向的元素,但是不能移动它。除此之外也要实现has_next()和next()方法。
PeekIterator可以用普通iterator的get_next()来获得,但是要记录下来,下一次调用get_next的时候直接返回上一次peek的即可。
代码:
class Iterator {
public:
Iterator(vector<int>& num) : data(move(num)), size(0) {}
bool has_next() {return size < data.size();}
int get_next() {
return data[size++];
}
private:
vector<int> data;
int size;
};
class PeekIterator {
public:
PeekIterator(vector<int>& num) : iter(num) {}
bool has_next() {
iter.has_next() || !peek.empty();
}
int get_next() {
if (!peek.empty()) {
int ret = peek.back();
peek.pop_back();
return ret;
}
return iter.get_next();
}
int get_peek() {
if (!peek.empty()) {
return peek.back();
}
int ret = iter.get_next();
peek.push_back(ret);
return ret;
}
private:
vector<int> peek;
Iterator iter;
};
No comments:
Post a Comment