学校的Eb1b卡拿到后三个月,能不能去公司?# Immigration - 落地生根
t*a
1 楼
常年用C++,看到两道题要实现iterator
1. class flatten implements iterator{
public flatten(vector> 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 >::iterator itr1;
vector >::iterator itr1end;
vector::iterator itr2;
vector::iterator itr2end;
void Getitr2 ()
{
itr2=itr1->begin();
itr2end=itr1->end();
itr1++;
}
public:
Iterator(vector > &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;
}
};
1. class flatten implements iterator{
public flatten(vector
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
vector
vector
void Getitr2 ()
{
itr2=itr1->begin();
itr2end=itr1->end();
itr1++;
}
public:
Iterator(vector
{
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;
}
};