作为标题,我创建了一个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;
}
答案 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()
元素(作为抽象的一部分)。