Sunday, January 18, 2015

贴一个C++ nested Iterator的code,求讨论和指正。

http://www.mitbbs.com/article_t/JobHunting/32868935.html

发信人: tdscdma (tdscdma), 信区: JobHunting
标  题: 贴一个C++ nested Iterator的code,求讨论和指正。
发信站: BBS 未名空间站 (Sun Jan 18 01:23:28 2015, 美东)

常年用C++,看到两道题要实现iterator
1. class flatten implements iterator{
  public flatten(vector<vector<int>> a);
  boolean hasNext();
  iterator next();
}

2. "Program an iterator for a List which may include nodes or List  i.e.  *
{0,
{1,2}, 3 ,{4,{5, 6}}} Iterator returns 0 - 1 - 2 - 3 - 4 - 5 - 6"

第一题C++可以实现,第二题除非自己定义node structure,否则感觉无解。主要是C++
里的iterator不能赋NULL,看结束也不能用"iterator==NULL"来判断,得专门维持
collection结束的标识。感觉这种题是专
门给Java的人出的,C++没法搞,起码不能用已有的STL搞,非常坑人。不知道大家有什
么建议。

第一题的C++实现。

class Iterator
{
private:
    vector<vector<int> >::iterator itr1;
    vector<vector<int> >::iterator itr1end;
    vector<int>::iterator itr2;
    vector<int>::iterator itr2end;
    void Getitr2 ()
    {
        itr2=itr1->begin();
        itr2end=itr1->end();
        itr1++;
    }
public:
    Iterator(vector<vector<int> > &vec;)
    {
        itr1=vec.begin();
        itr1end=vec.end();
        Getitr2();
    }
    bool hasNext()
    {
        return (itr2!=itr2end||itr1!=itr1end);
    }
    int next()
    {
        if(itr2==itr2end)
        {
            if(itr1!=itr1end)
            Getitr2();
        }
        int val=*itr2;
        itr2++;
        if(itr2==itr2end)
        {
            if(itr1!=itr1end)
            Getitr2();
        }
        return val;
    }
};



No comments:

Post a Comment