我可以使用 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()
元素(有意作为抽象的一部分)。
作为标题,我创建了一个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()
元素(有意作为抽象的一部分)。