儘管有通常的進程用戶堆棧,我仍然需要另一個堆棧,例如。一個明確可訪問的。例如,這將允許遞歸步行暫停,恢復,拆分以及零件從一個線程移動到另一個線程。在C++中實現另一個用戶堆棧
如果我們有:
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
過程可以轉化爲一個迭代,然後通過pauseing擴展,分裂等
但是,如何實現Stack
,如果節點可以是abitrary,Node
衍生類,使用虛擬函數nctions和子類依賴的大小?
你必須自己實現它,還是允許使用'std :: stack <>'? –
這裏通常的解決方案是指向對象的(智能)指針的集合,以避免切片問題。 –
std :: stack將被實例化爲一個給定類型,例如'Node',然後無法處理任何其他大小猜測的'Node'派生對象。 – dronus