3.设计一 一个底层容 器为向量类模板rector下>的适配器,适配器为实现"最大值优先"的优先级队列,测试main函数中随机生成10个20以内的in型数据压入队列中,然后依次出队并显示。
时间: 2023-11-27 22:50:41 浏览: 75
以下是一个向量类模板 `vector` 的适配器,实现了 "最大值优先" 的优先级队列:
```c++
#include <vector>
#include <algorithm>
#include <iostream>
template<typename T>
class PriorityQueue {
private:
std::vector<T> data;
public:
bool empty() const {
return data.empty();
}
size_t size() const {
return data.size();
}
const T& top() const {
return *std::max_element(data.begin(), data.end());
}
void push(const T& value) {
data.push_back(value);
}
void pop() {
auto max_it = std::max_element(data.begin(), data.end());
if (max_it != data.end()) {
std::swap(*max_it, data.back());
data.pop_back();
}
}
};
int main() {
PriorityQueue<int> q;
for (int i = 0; i < 10; ++i) {
int value = rand() % 20;
q.push(value);
std::cout << "Push: " << value << std::endl;
}
std::cout << "Size: " << q.size() << std::endl;
while (!q.empty()) {
std::cout << "Top: " << q.top() << std::endl;
q.pop();
}
return 0;
}
```
这里使用了 `std::vector` 存储元素,同时利用 `std::max_element` 函数查找最大值。在 `pop` 函数中,先查找最大值的位置,然后将其与最后一个元素交换位置并弹出,实现了 "最大值优先" 的出队操作。
阅读全文