class Vector2D {
public:
vector<vector<int>> *ptr_vec2d;
int i = 0, j = 0;
Vector2D(vector<vector<int>>& vec2d) {
// Initialize your data structure here
ptr_vec2d = &vec2d;
hasNext();
}
int next() {
hasNext();
return (*ptr_vec2d)[i][j++];
}
bool hasNext() {
while (i < ptr_vec2d->size() && j == (*ptr_vec2d)[i].size()) {
++i;
j = 0;
}
return i < ptr_vec2d->size();
}
};
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i(vec2d);
* while (i.hasNext()) cout << i.next();
*/
public class Vector2D implements Iterator<Integer> {
Iterator<Integer> inIter;
Iterator<List<Integer>> outIter;
public Vector2D(List<List<Integer>> vec2d) {
outIter = vec2d.iterator();
}
@Override
public Integer next() {
hasNext();
return inIter.next();
}
@Override
public boolean hasNext() {
while (outIter.hasNext() && (inIter == null || !inIter.hasNext())) {
inIter = outIter.next().iterator();
}
return inIter == null ? false : inIter.hasNext();
}
}
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i = new Vector2D(vec2d);
* while (i.hasNext()) v[f()] = i.next();
*/