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

Can I use member function of underlying container of priority_queue

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

class "std::priority_queue>, >" has no member "reserve"
class std::priority_queue, std::greater >' has no member named 'begin'
etc.

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

#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;
}

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

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

#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() 元素(有意作为抽象的一部分)。