t*****a 发帖数: 106 | 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;
}
}; |
z******g 发帖数: 271 | 2 你这样做意义不大,要么就写java,要么就写cpp自己的iterator |
t*****a 发帖数: 106 | 3 好吧。这种iterator的题还是很坑C++用户的,基本上得自己定义类型定义structure从
头开始写。
【在 z******g 的大作中提到】 : 你这样做意义不大,要么就写java,要么就写cpp自己的iterator
|
w****a 发帖数: 710 | |
B********e 发帖数: 1062 | 5 http://www.careercup.com/question?id=6246384562864128
*
++
【在 t*****a 的大作中提到】 : 常年用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++
|
a****w 发帖数: 60 | 6 用c++和python的怎么办
【在 w****a 的大作中提到】 : G家最喜欢考iterator了
|
t**r 发帖数: 3428 | |
t*****a 发帖数: 106 | 8 感觉有些iterator的题C++基本就没法弄。。。写出来太复杂了,正发愁呢。
【在 a****w 的大作中提到】 : 用c++和python的怎么办
|
w****a 发帖数: 710 | 9 其实我觉得绝大部分的iterator题用C++写也无压力啊。
nested那个是有点难办。其他的还好。
【在 a****w 的大作中提到】 : 用c++和python的怎么办
|
t*****a 发帖数: 106 | 10 nested那个非要写就用一个pair, 第一个存iterator,第二个存end的标识别。把pair压
入stack
递归调用
【在 w****a 的大作中提到】 : 其实我觉得绝大部分的iterator题用C++写也无压力啊。 : nested那个是有点难办。其他的还好。
|
|
|
w****a 发帖数: 710 | 11 用boost::any更好,真要面到我就跟面试官商量能不能用any。
【在 t*****a 的大作中提到】 : nested那个非要写就用一个pair, 第一个存iterator,第二个存end的标识别。把pair压 : 入stack : 递归调用
|
t*****a 发帖数: 106 | 12 兄台有空给大家写个例子吧。nest多了我实在想不出好办法,每层都要存一个
collection的end标识,太麻烦了。各种nested vector, map, list. 假如有10层,存
10个iterator还得存10个end的标识,太麻烦。
【在 w****a 的大作中提到】 : 用boost::any更好,真要面到我就跟面试官商量能不能用any。
|
w****a 发帖数: 710 | 13 感觉我做法好像跟你有点不一样。比如说输入,
那个nested array我的想法大概是类似这样的:
比如输入为,{0, {1, 2}, 3 ,{4, {5, 6}}}
vector nested;
nested.push_back(any((int)0));
vector element1 = {any((int)1), any((int)2)};
nested.push_back(any(element1));
nested.push_back(any(3));
vector element3 = {any(4)};
vector element3_1 = {any(5),any(6)};
nested.push_back(any(element3_1));
迭代器:
NestedIterator it(nested);
while (it.has_next()) {
cout << it.get_next() << " ";
}
我想法是不用stl的iterator。好像跟你思路不太一样。。
当然如果用iterator的话,也可以用vector来存,any只有两种类型,iterator或者
vector。
【在 t*****a 的大作中提到】 : 兄台有空给大家写个例子吧。nest多了我实在想不出好办法,每层都要存一个 : collection的end标识,太麻烦了。各种nested vector, map, list. 假如有10层,存 : 10个iterator还得存10个end的标识,太麻烦。
|
s******8 发帖数: 4192 | 14 第二题根据实际需求实现方法差别极大。内存要求,访问要求,指针长度,是否共享子
iterator,node类型等等细节决定实现。不知道细节要求,都是空中楼阁,白说。 |
w****a 发帖数: 710 | |