使用 deque 实例化 priority_queue 无法编译 - 使用 vector 则可以。这是为什么?
Instantiating priority_queue with deque does not compile - with vector it does. Why is that?
在下面的程序中为什么deque
构造失败而vector
构造正常?
两者都提供了 priority_queue
期望的函数和 RandomAccess 迭代器。我看不出原因。
我针对 C++98、C++11 和 C++14 测试了它:see test program
#include <vector>
#include <deque>
#include <queue>
using namespace std;
int main()
{
deque<int> d;
priority_queue<int> q(d.begin(), d.end());
vector<int> v;
priority_queue<int> q1(less<int>(), v); //compiles
deque<int> d1;
priority_queue<int> q2(less<int>(), d1); //does not compile
return 0;
}
您错过了将 deque<int>
指定为 priority_queue
的模板参数:
deque<int> d1;
priority_queue<int,deque<int>> q2(less<int>(), d1);
// ^^^^^^^^^^
查看工作示例 here。
参见std::priority_queue
的参考文档。 std::vector
作为模板的默认类型参数:
template<
class T,
class Container = std::vector<T>, // <<<<<<<<<<<<<<<<
class Compare = std::less<typename Container::value_type>
> class priority_queue;
这就是编译其他版本的原因。
在下面的程序中为什么deque
构造失败而vector
构造正常?
两者都提供了 priority_queue
期望的函数和 RandomAccess 迭代器。我看不出原因。
我针对 C++98、C++11 和 C++14 测试了它:see test program
#include <vector>
#include <deque>
#include <queue>
using namespace std;
int main()
{
deque<int> d;
priority_queue<int> q(d.begin(), d.end());
vector<int> v;
priority_queue<int> q1(less<int>(), v); //compiles
deque<int> d1;
priority_queue<int> q2(less<int>(), d1); //does not compile
return 0;
}
您错过了将 deque<int>
指定为 priority_queue
的模板参数:
deque<int> d1;
priority_queue<int,deque<int>> q2(less<int>(), d1);
// ^^^^^^^^^^
查看工作示例 here。
参见std::priority_queue
的参考文档。 std::vector
作为模板的默认类型参数:
template< class T, class Container = std::vector<T>, // <<<<<<<<<<<<<<<< class Compare = std::less<typename Container::value_type> > class priority_queue;
这就是编译其他版本的原因。