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++的
|