对于std :: priority_queue,我假设第一个模板参数指定了类型,第二个模板参数应该是该类型的容器.例:
priority_queue<int, vector<int>> someQueue;
Run Code Online (Sandbox Code Playgroud)
但是,以下代码编译并似乎运行正常:
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;
}
Run Code Online (Sandbox Code Playgroud)
上面的代码是无效的(即给出UB)?
如果它有效 - someClass在priority_queue中使用的第一个模板参数(即)是什么.
在C++ 11规范中,关于std::priority_queue§23.6.4 的部分.在其中,第一个模板参数只是用于容器的默认类型,而不是其他任何内容.
实际值类型取自容器.
该类声明为
template<
class T,
class Container = std::vector<T>,
class Compare = std::less<typename Container::value_type>
> class priority_queue;
Run Code Online (Sandbox Code Playgroud)
[取自此参考 ]
该声明显示了使用第一个模板参数的方式,时间和位置.
| 归档时间: |
|
| 查看次数: |
463 次 |
| 最近记录: |