stack和queue的模拟实现

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

文章目录

  • 容器适配器
  • stack的模拟实现
  • queue的模拟实现


容器适配器

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

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

stack的模拟实现

stack的功能函数:
stack和queue的模拟实现_第3张图片
模拟实现代码:

//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的功能函数:
stack和queue的模拟实现_第4张图片
模拟实现代码:


//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;
	};
}

如有错误, 多多指教!

你可能感兴趣的:(C++,c++,数据结构,算法)