模拟实现优先级队列超详解(C++)

本文详细讲解了C++中的容器适配器,包括stack、queue和重点介绍了priority_queue。文中给出了priority_queue的概念、用法,并提供了模拟实现。强调了priority_queue基于堆的数据结构,以及默认遵循大堆原则。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在这里插入图片描述

😇 😇大家好,我是bug!今天我们来讲讲容器适配器
(代码可能会有一点问题,请各位老铁指正 😘 😘 )

容器适配器

🍉 🍉容器适配器:简单可以理解为通过对不适用的容器进行封装处理,将不适用的序列式容器(包括 vector、deque 和 list)变得适用。

🍉 🍉可以这样认为,容器配置器不会要求底层容器的种类,只要求底层的容器可以支持适配器的功能。(不同的容器效率也不一样)

一、stack

🌹 🌹 栈: 又名堆栈,它是一种运算受限的线性表。限定仅在表尾进行插入和删除操作的线性表。这一端被称为栈顶,相对地,把另一端称为栈底。向一个栈插入新元素又称作进栈、入栈或压栈,它是把新元素放到栈顶元素的上面,使之成为新的栈顶元素;从一个栈删除元素又称作出栈或退栈,它是把栈顶元素删除掉,使其相邻的元素成为新的栈顶元素。

🌵🌵常用接口:

函数 用法
stack() 构造空的栈
empty() 检测stack是否为空
size() 返回stack中元素的个数
top() 返回栈顶元素的引用
push() 将元素val压入stack中
pop() 将stack中尾部的元素弹出

🍒 🍒模拟实现⬇️ ⬇️:

#include<iostream>
#include<queue>

using std::cin;
using std::cout;
using std::endl;
using std::deque;

namespace lz
{
   
	template<class T,class Container = deque<T>>
	class stack
	{
   
	private:
		Container _con;

	public:
		stack()
			:_con()
		{
   }
		//入栈,出栈
		void push(const T& val) {
    _con.push_back(val); }
		void pop()	{
    if (empty()) return; _con.pop_back(); }

		//元素个数,判空
		size_t size() {
    return _con.size(); }
		bool empty() {
    return size() == 0; }

		//栈顶数据(可修改和不可修改)
		T& top(){
   	return _con.back();}
		const T& top()const {
    return _con.back(); }
	};
}


#include"stack.h"

void Test_stack()
{
   
	//默认容器:双端队列
	lz::stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	while (!s1.empty())
	{
   
		cout << s1.top() << endl;
		s1.pop(
评论 28
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

今天也要写bug

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值