当前位置:  开发笔记 > 编程语言 > 正文

priority_queue中第一个模板参数的用途是什么

如何解决《priority_queue中第一个模板参数的用途是什么》经验,为你挑选了2个好方法。

对于std :: priority_queue,我假设第一个模板参数指定了类型,第二个模板参数应该是该类型的容器.例:

priority_queue> someQueue;

但是,以下代码编译并似乎运行正常:

class SomeClass
{
};

int main()
{
    priority_queue > pq;
    int x = 9;
    pq.push(x);
    int t = pq.top();
    cout << t << endl;
    pq.pop();
    return 0;
}

上面的代码是无效的(即给出UB)?

如果它有效 - someClass在priority_queue中使用的第一个模板参数(即)是什么.



1> Some program..:

在C++ 11规范中,关于std::priority_queue§23.6.4 的部分.在其中,第一个模板参数只是用于容器的默认类型,而不是其他任何内容.

实际值类型取自容器.

该类声明为

template<
    class T,
    class Container = std::vector,
    class Compare = std::less
> class priority_queue;

[取自此参考 ]

该声明显示了使用第一个模板参数的方式,时间和位置.


对我来说,这违反了最不惊讶的原则.
所以第一个参数仅在我自己没有指定容器时使用 - 是吗?

2> T.C...:

通过LWG第2566号新鲜投票进入杰克逊维尔的工作文件:

T容器适配器的第一个模板参数应表示与之相同的类型Container::value_type.

相应地写入会std::priority_queue>导致未定义的行为.

推荐阅读
赛亚兔备_393
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有