本文已参与「新人创作礼」活动,一起开启掘金创作之路。
原文链接:blog.csdn.net/roufoo/arti…
Flatten 2D Vector Implement an iterator to flatten a 2d vector.
Example Example 1:
Input:[[1,2],[3],[4,5,6]] Output:[1,2,3,4,5,6] Example 2:
Input:[[7,9],[5]] Output:[7,9,5]
注意这题不能用一个2D vector的copy,不然空间不满足要求。 解法1:利用C++的iterator 这题学到了很多iterator的知识。
一维和二维vector都有iterator,一维vector的iterator就好比指向每个元素的指针,二维vector的iterator就好比指向其中每个一维vector的指针。 空的一维和二维vector的begin()和end()相等。 (iter++)先返回iter,然后iter++。 跟*(i++)一回事。 iter像指针,但不能与指针比较。一个未初始化的iter不能与NULL比较。如果非要初始化,可将其初始化为对应container的end()。 即vector a = {1,2,3,4,5}; vector::iterator iter = a.end(); 代码如下:
class Vector2D {
public:
Vector2D(vector<vector<int>>& vec2d) {
begin = vec2d.begin();
end = vec2d.end();
if (begin != end) iter = (*begin).begin();
}
int next() {
hasNext();
return *(iter++);
}
bool hasNext() {
while(begin != end && (iter == (*begin).end())) {
begin++;
iter = (*begin).begin();
}
return begin != end;
}
private:
vector<vector<int>>::iterator begin, end;
vector<int>::iterator iter;
};
/**
* Your Vector2D object will be instantiated and called as such:
* Vector2D i(vec2d);
* while (i.hasNext()) cout << i.next();
*/