我在一本关于算法的书中找到了与以下类似的代码。代码尝试从max_heap的当前状态初始化向量。但是,Xcode(7.3)中的以下代码会产生编译时错误:
无匹配构造函数用于初始化' vector'
// declaring priority queue
priority_queue<Star, vector<Star>> max_heap;
// pushing/popping to/from heap
// initializing vector with heap
vector<Star> closestStars(max_heap);
这本书出错或我做错了什么。在前一种情况下,是否有正确的方法从STL优先级队列的基础容器初始化向量?
答案 0 :(得分:2)
本书可能假设priority_queue
是std::vector
的子类。
C ++标准不保证。
构建完成后,priority_queue
不会对基础容器提供public
访问权限,因此您无法从中初始化std::vector
。
但是,显然,您可以做的是将std::priority_queue
子类化,子类显然可以访问继承的protected
成员c
,该成员应该是基础std::vector
1}},你可以用来复制 - 构造另一个向量。