私は次のような形をしています:
struct Tree {
string rule;
list<Tree*> children;
}
この for ループ内から出力しようとしています。
for(list<Tree*>::iterator it=(t->children).begin(); it != (t->children).end(); it++) {
// print out here
}
いつでも再帰を反復に変えることができます。ここに補助キューがあります:
std::deque<Tree *> todo;
todo.push_back(t);
while (!todo.empty())
{
Tree * p = todo.front();
todo.pop_front();
std::cout << p->rule << std::endl;
todo.insert(todo.end(), p->children.begin(), p->children.end());
}
C++11 では、これはもちろんfor
ループになります。
for (std::deque<Tree *> todo { { t } }; !todo.empty(); )
{
// ...
}