我不知道这段代码的工作方式和原因:
// postorder dfs
Iterator< Index<String<char> >, TopDown<ParentLink<Postorder> > >::Type
myIterator(myIndex);
while (goDown(myIterator));
for (; !atEnd(myIterator); goNext(myIterator))
// do something with myIterator ( Traverse Through (Suffix)-tree )
答案 0 :(得分:18)
你已经遇到了C ++的有趣部分 - 在句法上有效但难以为人解析的技术中使用语言结构。
while (goDown(myIterator));
这将是“goDown(myIterator)”,直到它返回false。然后它将继续进入for循环。它没有任何循环 - 但这没关系,因为函数goDown正在工作。
for (; !atEnd(myIterator); goNext(myIterator))
这不会初始化任何东西,但测试它不是atEnd(myIterator) - 虽然它不是,但它将是goNext(myIterator)。它也可以写成while循环,使其更容易理解:
while(!atEnd(myIterator))
{
goNext(myIterator));
}
所以代码将:
答案 1 :(得分:4)
显然,goDown
和goNext
正在通过引用并改变它来进行论证。因此,您的两个问题的答案是:1 while
调用goDown
多次,改变myIterator
,这就是您所谈论的间接影响,从2. for
开头myIterator
与while
完全一样 - 所以当然它不会重新分配它,这会撤消所有的工作!