Implement an iterator to flatten a 2d vector.
For example,
Given 2d vector =
[
[1,2],
[3],
[4,5,6]
]
By callingnextrepeatedly untilhasNextreturns false, the order of elements returned bynextshould be:[1,2,3,4,5,6]
.
Follow up:
As an added challenge, try to code it using onlyiterators in C++oriterators in Java.
public class Vector2D implements Iterator<Integer> {
List<Integer> list = new ArrayList<>();
int index;
public Vector2D(List<List<Integer>> vec2d) {
for (List<Integer> vec : vec2d){
list.addAll(vec);
}
index = 0;
}
@Override
public Integer next() {
return list.get(index++);
}
@Override
public boolean hasNext() {
return index < list.size();
}
}
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i = new Vector2D(vec2d);
* while (i.hasNext()) v[f()] = i.next();
*/