由买买提看人间百态

boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
JobHunting版 - 问一道题
相关主题
相关话题的讨论汇总
话题: vecvec话题: arraylist话题: itlvl2话题: vector话题: int
进入JobHunting版参与讨论
1 (共1页)
w****x
发帖数: 2483
1
iterator of vector>
谁能写一个??
p*****2
发帖数: 21240
2
class MyIterator(v:Vector[Vector[Int]]){
private[this] val vector1=v.iterator
private[this] var vector2:Iterator[Int]=null

def hasNext():Boolean={
if(vector2!=null && vector2.hasNext) return true
vector2=null
while(vector1.hasNext && (vector2==null || !vector2.hasNext))
{
val next=vector1.next
if(next!=null) vector2=next.iterator
}

vector2!=null && vector2.hasNext
}

def next():Int={
if(hasNext())
return vector2.next
else
throw new Exception("empty")
}
}
f*******t
发帖数: 7549
3
稍微写了下,感觉一个实现C++普通接口的至少要两小时……
p*****2
发帖数: 21240
4
object test2 extends App {
val v1=Vector(1,2,3)
val v2:Vector[Int]=null
val v3=Vector(4,5,6)

val vv:Vector[Vector[Int]]=Vector(v1,v2,v3)
val it=new MyIterator(vv)

for(i<-1 to 7)
{
println(it.hasNext)
println(it.next)
}
}
true
1
true
2
true
3
true
4
true
5
true
6
false
Exception in thread "main" java.lang.Exception: empty
at MyIterator.next(test2.scala:25)
at test2$$anonfun$1.apply$mcVI$sp(test2.scala:39)
at scala.collection.immutable.Range.foreach$mVc$sp(Range.scala:142)
at test2$delayedInit$body.apply(test2.scala:36)
at scala.Function0$class.apply$mcV$sp(Function0.scala:40)
at scala.runtime.AbstractFunction0.apply$mcV$sp(AbstractFunction0.scala:
12)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.App$$anonfun$main$1.apply(App.scala:71)
at scala.collection.immutable.List.foreach(List.scala:309)
at scala.collection.generic.TraversableForwarder$class.foreach(
TraversableForwarder.scala:32)
at scala.App$class.main(App.scala:71)
at test2$.main(test2.scala:28)
at test2.main(test2.scala)
p*****2
发帖数: 21240
5

为什么要用C++?

【在 f*******t 的大作中提到】
: 稍微写了下,感觉一个实现C++普通接口的至少要两小时……
f*******t
发帖数: 7549
6
他问的vector>不是C++吗,我自然地想到用C++写咯。
java版本的估计15分钟吧

【在 p*****2 的大作中提到】
:
: 为什么要用C++?

p*****2
发帖数: 21240
7

vector不只C++才有吧?用C++去面Java职位本来就别扭

【在 f*******t 的大作中提到】
: 他问的vector>不是C++吗,我自然地想到用C++写咯。
: java版本的估计15分钟吧

w****x
发帖数: 2483
8

我就想问问那个初始化怎么方便的处理,二爷看看我的code吧
class CIterIter
{
public:
CIterIter(vector>& vecvec) : m_vecvec(vecvec), m_ni(0), m_nj(0),
bInited(false)
{}
bool hasNext()
{
if (!m_vecvec.empty() && !m_vecvec[0].empty())
return true;
int i,j;
return prob(i,j);
}
int getVal() { return m_vecvec[m_ni][m_nj]; }
void next()
{
if (!bInited)
{
bInited = true;
if (!m_vecvec.empty() && !m_vecvec[0].empty())
return;
}
prob(m_ni, m_nj);
}
private:
bool prob(int& i, int& j)
{
i = m_ni;
j = m_nj;

if (i >= m_vecvec.size())
return false;

if (i < m_vecvec.size() && j < m_vecvec[i].size()-1)
{
j++;
return true;
}
i++;
for(; i < m_vecvec.size(); i++)
{
if (!m_vecvec[i].empty())
break;
}
if (i == m_vecvec.size()) return false;
j = 0;
return true;
}
int m_ni;
int m_nj;
vector>& m_vecvec;
bool bInited;
};

【在 p*****2 的大作中提到】
: object test2 extends App {
: val v1=Vector(1,2,3)
: val v2:Vector[Int]=null
: val v3=Vector(4,5,6)
:
: val vv:Vector[Vector[Int]]=Vector(v1,v2,v3)
: val it=new MyIterator(vv)
:
: for(i<-1 to 7)
: {

f*******t
发帖数: 7549
9
Java版本比较方便,可以用ArrayList自带的iterator。C++如果只需要实现类似于Java
iterator的两个接口,倒是不难。
public class DoubleLevelArrayListIterator {
private Iterator> itLvl1;
private Iterator itLvl2;

public DoubleLevelArrayListIterator(ArrayList> a) {
itLvl1 = a.iterator();
itLvl2 = null;
}

public boolean hasNext() {
if (itLvl2 != null && itLvl2.hasNext()) {
return true;
} else {
while ((itLvl2 == null || !itLvl2.hasNext()) && itLvl1.hasNext()
) {
itLvl2 = itLvl1.next().iterator();
}
return itLvl2 != null && itLvl2.hasNext();
}
}

public Integer next() {
if (itLvl2 != null && itLvl2.hasNext()) {
return itLvl2.next();
} else {
while ((itLvl2 == null || !itLvl2.hasNext()) && itLvl1.hasNext()
) {
itLvl2 = itLvl1.next().iterator();
}

if (itLvl2 != null && itLvl2.hasNext())
return itLvl2.next();
else
return null;
}
}

public static void main(String[] args) {
ArrayList> a = new ArrayList>(
);
for (int i = 1; i <= 5; i++) {
ArrayList temp = new ArrayList();
for (int j = 1; j <= i; j++) {
temp.add(i * j);
}
a.add(temp);
}
DoubleLevelArrayListIterator it = new DoubleLevelArrayListIterator(a
);

while (it.hasNext()) {
System.out.println(it.next());
}
}
}
p*****2
发帖数: 21240
10

),
我不懂C++呀。你也换Java吧,这样我们以后好交流一些。lolhaha都转了。

【在 w****x 的大作中提到】
:
: 我就想问问那个初始化怎么方便的处理,二爷看看我的code吧
: class CIterIter
: {
: public:
: CIterIter(vector>& vecvec) : m_vecvec(vecvec), m_ni(0), m_nj(0),
: bInited(false)
: {}
: bool hasNext()
: {

w****x
发帖数: 2483
11

你.... 最近的面试还是得用c++的

【在 p*****2 的大作中提到】
:
: ),
: 我不懂C++呀。你也换Java吧,这样我们以后好交流一些。lolhaha都转了。

p*****2
发帖数: 21240
12

我准备下次面试用scala了。

【在 w****x 的大作中提到】
:
: 你.... 最近的面试还是得用c++的

1 (共1页)
进入JobHunting版参与讨论
相关主题
相关话题的讨论汇总
话题: vecvec话题: arraylist话题: itlvl2话题: vector话题: int