小编Joe*_*nce的帖子

如何编写可以接受堆栈或队列的函数模板?

我采取四种算法是完全不同的,因为他们使用什么数据结构相同-两个用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 */);
}
Run Code Online (Sandbox Code Playgroud)

我已经成功地使用priority_queue- 和 - stack基础实现,但我不能对queue基于算法的算法做同样的事情,因为它使用不同的名称来访问最重要的元素(front( )而不是top( )).我知道我可以专门针对这种情况使用模板,但后来我会有大量的重复代码(这是我要避免的).

实现这一目标的最佳方法是什么?我的第一个本能是为队列创建一个包装类,它添加了一个top( )等同于stack's 的操作,但我一直在读这个子类化STL类是一个禁忌.那我该怎么办呢?

c++ templates stl function-templates

5
推荐指数
1
解决办法
1335
查看次数

为什么带有空字符串的getResourceAsStream返回一个空的InputStream?

我刚刚遇到了getResourceAsInputStream的一些特殊行为,我希望有人可以对此有所了解.

传递此方法,不存在的资源的名称将返回null,就像我期望的那样.但是,传递一个空的或空格填充的字符串实际上会返回一个有零字节的有效InputStream.只有空的或空间填充的字符串似乎这样做; 像"\ t"或"\n"这样的空格将导致null.

这是预期的行为吗?如果是这样,它的目的是什么?

this.class.getResourceAsStream("no_such_resource"); // returns null
this.class.getResourceAsStream("");                 // returns an InputStream
this.class.getResourceAsStream("    ");             // returns an InputStream
this.class.getResourceAsStream("\t");               // returns null
Run Code Online (Sandbox Code Playgroud)

java

5
推荐指数
1
解决办法
1274
查看次数

标签 统计

c++ ×1

function-templates ×1

java ×1

stl ×1

templates ×1