用C ++实现另一个用户堆栈

时间:2013-12-18 15:51:33

标签: c++ stack

尽管有通常的进程用户堆栈,但我需要另一个堆栈,例如。一个可以明确访问的。这将允许递归步行被暂停,恢复,分割并且例如部件从一个线程移动到另一个线程。

如果我们有:

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

1 个答案:

答案 0 :(得分:2)

您只需使用std::stack<Node*>,或理想情况下使用owning_pointer<Node>代替Node*