C++ 有没有一种方法可以在不重载<&书信电报;操作人员

C++ 有没有一种方法可以在不重载<&书信电报;操作人员,c++,list,stl,C++,List,Stl,我有这样的东西: struct Tree { string rule; list<Tree*> children; } 结构树{ 字符串规则; 列出儿童名单; } 我正试图从这个for循环中打印出来 for(list<Tree*>::iterator it=(t->children).begin(); it != (t->children).end(); it++) { // print out here } for(list::

我有这样的东西:

struct Tree {
    string rule;
    list<Tree*> children;
}
结构树{ 字符串规则; 列出儿童名单; } 我正试图从这个for循环中打印出来

for(list<Tree*>::iterator it=(t->children).begin(); it != (t->children).end(); it++) {
    // print out here
}
for(list::iterator it=(t->children.begin();it!=(t->children.end();it++){
//在这里打印
}

您始终可以将递归转化为迭代。下面是一个辅助队列:

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());
}

您总是可以将递归转化为迭代。下面是一个辅助队列:

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());
}

你在哪里重载@aakash?我想看看我是否可以在不重载的情况下打印,因为你想要递归打印,所以定义一个助手函数来进行打印是最简单的。否则,您将需要使用通常的递归到迭代技术,这通常涉及某种队列。@克里斯:我认为问题的关键是如何避免在仍然执行一些递归工作的情况下定义函数。由于
树的所有成员都是公共的,您可以直接打印它们:
std::cout rule。如果要递归打印所有子树,可能需要在递归函数中执行此操作(但它不需要是运算符)。您在哪里重载@aakash?我正在尝试查看是否可以在不重载的情况下打印,因为您希望递归打印,所以定义一个辅助函数来执行打印是最简单的。否则,您将需要使用通常的递归到迭代技术,这通常涉及某种队列。@克里斯:我认为问题的关键是如何避免在仍然执行一些递归工作的情况下定义函数。由于
树的所有成员都是公共的,您可以直接打印它们:
std::cout rule。如果要递归打印所有子树,可能需要在递归函数中执行此操作(但不需要是运算符)。这是一种有趣的技术。这实际上可能对我正在做的事情有所帮助:pInteresting技术。这实际上可能对我正在做的事情有所帮助:p