我正在实现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