我正在實現4個算法,它們完全是,除了它們使用的是什麼數據結構 - 兩個使用priority_queue
,一個使用stack
,最後一個使用queue
。他們是比較長的,所以我想有一個接受容器類型作爲模板參數只有一個函數模板,然後讓每個算法調用模板,使用適當的參數,就像這樣:如何編寫可以接受堆棧或隊列的函數模板?
template <class Container>
void foo(/* args */)
{
Container dataStructure;
// Algorithm goes here
}
void queueBased(/* args */)
{
foo<queue<Item> >(/* args */);
}
void stackBased(/* args */)
{
foo<stack<Item> >(/* args */);
}
我基於priority_queue
和stack
的實現方法設法做到了這一點,但我無法對基於queue
的算法做同樣的工作,因爲它使用不同的名稱來訪問最前面的元素(front()
而不是top()
)。我知道我可以爲這種情況專門化模板,但是我會有大量的重複代碼(這是我試圖避免的)。
完成此操作的最佳方法是什麼?我的第一個直覺是爲隊列創建一個包裝類,它增加了一個相當於stack
的top()
操作,但是我一直在閱讀這個子類化的STL類是一個禁忌。那麼我該如何得到這種行爲呢?
我正在實現一組搜索算法,所以我需要適配器的特定排序行爲。 (LIFO給我一個寬度優先的搜索,而FIFO給我深度優先,例如) – 2011-01-27 21:17:38