【C++】stack、queue和优先级队列

一、前言

二、stack类

2.1 了解stack

2.2 使用stack

(1)empty

(2)size

(3)top

(4)push

(5)pop

2.3 stack的模拟实现

三、queue类

3.1 了解queue

3.2 使用queue

(1)empty

(2)size

(3)front

(4)back

(5)push

(6)pop

3.3 queue的模拟实现

四、优先级队列

4.1 了解优先级队列

4.2 使用优先级队列

(1)empty

(2)size

(3)top

(4)push

(5)pop

4.3 仿函数

4.4 优先级队列的模拟实现

五、deque类(了解)

5.1 关于deque

5.2 deque的应用

一、前言

通过前面的学习,我们已经对string、vector和list类有了了解

本文中介绍的stack、queue和优先级队列相比于前面的容器而言接口较少,并且有了前面的基础,在学习这几个容器的使用和模拟实现时会更好上手。

因此,本文仅对接口的使用进行简单介绍,把重点放在优先级队列等部分。


二、stack类

2.1 了解stack

stack - C++ Reference (cplusplus.com)icon-default.png?t=N7T8https://legacy.cplusplus.com/reference/stack/stack/通过文档,我们可以了解到以下的内容:

  • 区别于vector等容器,stack是一种容器适配器。通俗的讲,stack封装了一个其他的容器,并提供特定的成员函数来对容器进行操作并遵循栈的后进先出(Last-in First-out)原则。
  • stack的底层容器至少要支持以下操作:
  1. empty:判空
  2. size:获取容器有效元素个数
  3. back:获取容器尾部元素
  4. push_back:尾插
  5. pop_back:尾删
  • 通过这些操作,我们就可以实现栈的压入和弹出等行为
  • 我们可以指定vector、list和deque作为stack的底层容器,如果没有指定,默认情况下使用deque,后面会对该容器进行介绍。

2.2 使用stack

在实例化与stack类类似的容器适配器时,模板参数除了必须要传入元素类型,还可以选择传入底层容器的种类

例如:

(1)empty

bool empty() const;

检测栈是否为空

(2)size

size_type size() const;

返回stack中元素的个数

(3)top

value_type& top();

const value_type& top(); const

返回栈顶元素的引用

(4)push

void push(const value_type& val);

将val压入栈中

(5)pop

void pop();

将栈顶元素弹出

例如:

2.3 stack的模拟实现

前面提到,stack是一个容器适配器,其底层封装了其他的容器,这里我们以vector作为底层容器

namespace Eristic
{
	template<class T, class Container = vector<T>> 
    //一个模板参数传入数据类型,一个模板参数传入底层容器   
	class stack
	{
	public:
		void push(const T& val)
		{
			_con.push_back(val); //压栈即在容器尾部插入数据
		}

		void pop()
		{
			_con.pop_back(); //出栈即删除容器尾部的数据
		}

		const T& top()
		{
			return _con.back(); //栈顶元素即容器尾部的元素
		}

		size_t size()
		{
			return _con.size();
		}

		bool empty()
		{
			return _con.empty();
		}

	private:
		Container _con; //对容器进行封装
	};
}

三、queue类

3.1 了解queue

评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值