stack和queue的模拟实现

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


容器适配器

什么是容器适配器呢?虽然stack和queue也可以存放数据,但是STL并没有将他们两个纳入容器行列,而是stack和queue是在其他容器的基础上面进行了包装,STL中stack和queue的底层容器是deque容器。
我们观察一下stack和queue的模板参数:
在这里插入图片描述
在这里插入图片描述
第二个缺省参数,当没有指定的容器传入的时候,那么就是用deque作为底层实现容器。

也就是说,stack和queue既可以用顺序表实现,也可以用链表实现,但是如果你在Container中传入的是vector 那么stack就是对vector容器进行的包装

stack的模拟实现

stack的功能函数:
在这里插入图片描述
模拟实现代码:

//stack的模拟实现
namespace std
{
	template<class T,class Container = std::deque<T>>
	class stack
	{
	public:
		//入栈
		void push_back(const T& x)
		{
			_con.push_back(x);
		}
		//出栈
		void pop()
		{
			_con.push_back();
		}
		//获取栈顶的元素
		T& Top()
		{
			return _con.back();
		}

		const T& Top()const
		{
			return _con.back();
		}
		//栈中元素个数
		size_t size()
		{
			return _con.size();
		}
		
		bool empty()const
		{
			return _cno.empty();
		}
		
		void swap(stack<T, Container>& st)
		{
			std::swap(st._con);
		}
	private:
		//容器
		Container _con;
	};
}

queue的模拟实现

queue的功能函数:
在这里插入图片描述
模拟实现代码:


//queue的模拟实现
namespace std
{
	template<class T, class Container = std::deque<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}
		void pop()
		{
			_con.pop_front();
		}
		//获取队头的数据
		T& front()
		{
			return _con.front();
		}
		const T& front()const
		{
			return _con.front();
		}

		//获取元素个数
		size_t size()
		{
			return _con.size();
		}
		
		//获取队尾的数据
		T& back()
		{
			return _con.back();
		}
		const T& back()const
		{
			return _con.back();
		}
		
		//判断是否为空
		bool empty()const
		{
			return _con.empty();
		}
		
		//交换
		void swap(queue<T, Container>& st)
		{
			std::swap(st._con);
		}
	private:
		Container _con;
	};
}

如有错误, 多多指教!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值