我可以使用priority_queue的底层容器的成员函数

时间:2018-03-31 09:19:10

标签: c++ vector stl priority-queue member-functions

作为标题,我创建了一个priority_queue(默认使用向量作为基础容器)p。我可以使用向量的成员函数,例如p.push_back(a)p.reserve(25) 甚至使用for(auto i:p) {cout << i} 当我运行下面的代码时,编译器(GCC)告诉我

  

class&#34; std :: priority_queue&gt;,   &GT;&#34;没有会员&#34;保留&#34;
  class std :: priority_queue,std :: greater&gt;&#39;   没有名为&#39; begin&#39;
的成员   等

如果我想使用上面提到的功能,或者只是禁止它们,我该怎么做?

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

int main(){
    priority_queue<int , vector<int>, greater<int>> p;
    p.push_back(1);
    p.reserve(25);
    for(auto i : p){
        cout << i;
    }
    return 0;
}

1 个答案:

答案 0 :(得分:0)

容器适配器专门用于抽象出底层容器。它自己提供了一个新的抽象。

所以,不,你不能在队列中调用向量的成员。但是,你可以做的是在它进入队列之前调用向量上的函数。然后将其移动到位:

#include<iostream>
#include<queue>
#include<vector>

using namespace std;

int main(){
   vector<int>   v;
   v.reserve(25);
   v.push_back(1);

    priority_queue<int , vector<int>, greater<int>> p(greater<int>(), std::move(v));

    return 0;
} 

仍无法输出队列或堆栈的内容,因为您只能访问top()元素(作为抽象的一部分)。