zl程序教程

您现在的位置是:首页 >  Javascript

当前栏目

C++ -- queue 和 stack模拟实现

2023-04-18 14:26:58 时间

C++ – queue 和 stack模拟实现

1. queue模拟实现

队列是先进先出的特性,这里要支持vector、list、deque等等,这里queue和stack模拟实现,都是直接复用

1.0 成员变量

template <class T, class Container = list<T>>
Container _container;

1.1 push()

void push(const T& val)
{
	_container.push_back(val);
}

1.2 pop()

void pop()
{
	_container.pop_front();
}

1.3 front()

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

1.4 back()

const T& back()
{
	return _container.back();
}

1.5 size()

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

1.6 empty()

bool empty()
{
	return _container.empty();
}
  1. 解释class Container作用

就拿push()来说,_contatiner.push_back(val);假设 _Container是list类型,那么 _container就是list类型,这时 _container直接调用库接口push_back();

1.7 完整代码

namespace my_queue
{
	template <class T, class Container = list<T>>
	class queue
	{
	public:
		void push(const T& val)
		{
			_container.push_back(val);
		}

		void pop()
		{
			_container.pop_front();
		}

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

		const T& back()
		{
			return _container.back();
		}

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

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

	private:
		Container _container;
	};
}

2. stack模拟实现

2.0 成员变量

template <class T, class Container = vector<T>>
Container _container;

2.1 push()

void push(const T& val)
{
	_container.push_back(val);
}

2.2 pop()

void pop()
{
	_container.pop_back();
}

2.3 top()

const T& top()
{
	return _container.back();
}

2.4 back()

const T& back()
{
	return _container.back();
}

2.5 size()

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

2.6 empty()

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

2.7 完整代码

namespace my_stack
{
	template <class T, class Container = vector<T>>
	class stack
	{
	public:
		void push(const T& val)
		{
			_container.push_back(val);
		}

		void pop()
		{
			_container.pop_back();
		}

		const T& top()
		{
			return _container.back();
		}

		const T& back()
		{
			return _container.back();
		}

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

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

	private:
		Container _container;
	};
}