尽管有通常的进程用户堆栈,但我需要另一个堆栈,例如。一个可以明确访问的。这将允许递归步行被暂停,恢复,分割并且例如部件从一个线程移动到另一个线程。
如果我们有:
void recurse(Node& n)
{
n.calculate();
for(Node& child: n.children)
recurse(child);
}
然后我们可以这样做:
void recurse(Stack& stack)
{
Node& n=stack.peek();
n.calculate();
for(Node& child: n.children)
{
stack.push(child);
recurse(stack);
stack.pop();
}
}
新的recurse
过程可以转换为迭代过程,然后通过暂停,拆分等扩展。
但是,如果节点可以是一个abitrary Stack
- 派生类,使用虚函数和子类依赖大小,如何实现Node
?
答案 0 :(得分:2)
您只需使用std::stack<Node*>
,或理想情况下使用owning_pointer<Node>
代替Node*
。