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

标签 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 )

这是来自 seqan 的示例界面在此处描述:API

  1. while 如何影响 for 循环?
  2. 为什么 for 循环没有初始化?

最佳答案

您已经遇到了 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. 一直往下走,直到 goDown() 返回 false——这意味着 goDown 每次都在修改 myIterator
  2. goNext() 直到 atEnd()

关于c++ - 这段c++代码在做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1223172/

相关文章:

c++试图引用已删除的函数

c++ - 修改 Qt 库

c++ - pion 网络库入门

C++ 模板元编程 - 是否可以输出生成的代码?

C++ 模板元编程 - 是否可以输出生成的代码?

c++ - 这个 C++ 反序列化习惯用法是什么?使用整数 ID 变量调用文件读取器函数作为 `reinterpret_cast<char *>(&id)?`

c++ - 为什么 QFileInfo::isExecutable() 对 ".msi"文件返回 false?

c++ - 使用 cmake 对共享库的 undefined reference