【C++初阶】容器适配器模拟实现栈和队列(附源码)

一.容器适配器

其实在使用模板时,我们不仅可以使用类模板,还可以使用容器模板,这就是一个容器适配器,我们可任意给模板实例化不同的容器,然后就可以使用容器里的接口

template<class T,class Containers>

我们知道,栈可以用数组实现也可以用链表实现,以前在C语言那里,如果我们想要两个底层不同的栈,要么写两个栈,要么用typedef,但这做不到自由控制;在C++中,我们可以容器适配器解决这个问题,数组链表秒切换。

 注意使用的接口必须是你实例化的容器所拥有的,否则会报错

例:

  vector容器没有头插(push_front)和头删(pop_front)接口

  list却有这两个接口,所以在使用时要特别注意。


二.模拟实现stack

 

库里栈的模板是这样的,这个deque是一个双端队列,它同时拥有vector和list的接口。 

 

 

上图是栈的接口,都很简单,栈符合先进后出,下面就让我们用容器适配器模拟实现栈吧。

 

源码

template<class T,class Containers=deque<T>>  //容器适配器
	class stack   //栈
	{
	public:
		void push(const T& val)   //入栈,即尾插
		{
			_con.push_back(val);
		}

		void pop()   //出栈,即尾删
		{
			_con.pop_back();
		}

		const T& top() const  //取栈顶元素
		{
			return _con.back();
		}

		bool empty()
		{
			return _con.size() == 0;
		}

		size_t size() const
		{
			return _con.size();
		}
	private:
		Containers _con;
	};

三.模拟实现queue

 

队列和栈差不多,但队列是先进先出原则。 

源码

template<class T,class Containers=deque<T>>
	class queue   //队列
	{
	public:
		void push(const T&val)   //入队列,即尾插
		{
			_con.push_back(val);
		}

		void pop()   //出队列,即头删
		{
			_con.pop_front();
		}

		T& front()   //取队列的第一个元素
		{
			return _con.front();
		}

		const T& front() const
		{
			return _con.front();
		}

		bool empty()
		{
			return _con.size() == 0;
		}

		size_t size() const
		{
			return _con.size();
		}
	private:
		Containers _con;
	};

🐬🤖本篇文章到此就结束了, 若有错误或是建议的话,欢迎小伙伴们指出;🕊️👻

😄😆希望小伙伴们能支持支持博主啊,你们的支持对我很重要哦;🥰🤩

😍😁谢谢你的阅读。😸😼

评论 30
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值