对于std :: priority_queue,我假设第一个模板参数指定了类型,第二个模板参数应为该类型的容器。例子:
priority_queue<int, vector<int>> someQueue;
但是,以下代码可以编译并且运行正常:
class SomeClass
{
};
int main()
{
priority_queue <SomeClass, vector<int>> pq;
int x = 9;
pq.push(x);
int t = pq.top();
cout << t << endl;
pq.pop();
return 0;
}
上面的代码是否无效(即给UB)?
如果有效-someClass
优先级队列中使用的第一个模板参数(即)是什么。
通过LWG第2566期,对杰克逊维尔的工作文件进行了新的投票:
T
容器适配器的第一个模板参数应表示与相同的类型Container::value_type
。
相应地写入会std::priority_queue<SomeClass, std::vector<int>>
导致未定义的行为。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句