这段c ++代码在做什么?

n00*_*ki3 1 c++ seqan

我不知道这段代码的工作方式和原因:

// 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 )
Run Code Online (Sandbox Code Playgroud)

这是seqan的一个例子,接口在这里描述:API

  1. 怎么能影响for循环呢?
  2. 为什么for循环没有初始化?

Tom*_*ter 18

您已经遇到了C++的有趣部分 - 在语法上有效但难以为人解析的技术中使用语言结构.

while (goDown(myIterator));
Run Code Online (Sandbox Code Playgroud)

这将是"goDown(myIterator)",直到它返回false.然后它将继续进入for循环.它没有任何循环 - 但这没关系,因为goDown函数正在工作.

for (; !atEnd(myIterator); goNext(myIterator)) 
Run Code Online (Sandbox Code Playgroud)

这不会初始化任何东西,但测试它不是atEnd(myIterator) - 虽然它不是,但它将是goNext(myIterator).它也可以写成while循环,使其更容易理解:

while(!atEnd(myIterator)) 
{
    goNext(myIterator));
}
Run Code Online (Sandbox Code Playgroud)

所以代码将:

  1. 向下直到goDown()返回false - 这意味着goDown每次都在修改myIterator
  2. goNext()直到它是atEnd()