Implement an iterator to flatten a 2d vector.
For example,
Given 2d vector =
Given 2d vector =
[ [1,2], [3], [4,5,6] ]
By calling next repeatedly until hasNext returns false, the order of elements returned by next should be:
[1,2,3,4,5,6]
.[Thoughts]
实现题,按层从左到右遍历。
[Code]
1: class Vector2D {
2: public:
3: vector<vector<int>> data;
4: int x = 0;
5: int y = 0;
6: int total = 0;
7: int visited = 0;
8: Vector2D(vector<vector<int>>& vec2d) {
9: data = vec2d;
10: for(auto list : vec2d) {
11: total += list.size();
12: }
13: }
14:
15: int next() {
16: while(data[x].size() == 0) {x++;}
17:
18: int cur = data[x][y];
19: if(y+1 == data[x].size()) {
20: x = x+1;
21: y = 0;
22: } else {
23: y++;
24: }
25: visited ++;
26: return cur;
27: }
28:
29: bool hasNext() {
30: if(visited < total) return true;
31:
32: return false;
33: }
34: };
35:
36: /**
37: * Your Vector2D object will be instantiated and called as such:
38: * Vector2D i(vec2d);
39: * while (i.hasNext()) cout << i.next();
40: */