gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 12:49:46 25 4
gpt4 key购买 nike

如题,我创建了一个priority_queue(默认使用vector作为底层容器)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;
}

最佳答案

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

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

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

关于c++ - 我可以使用priority_queue底层容器的成员函数吗,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49586197/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com