中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++中stack與queue的使用方法

發布時間:2021-08-30 09:16:04 來源:億速云 閱讀:149 作者:chen 欄目:開發技術

本篇內容介紹了“C++中stack與queue的使用方法”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

stack與queue模擬實現

在stl中,stack(棧)與queue(隊列)都是容器適配器。

什么是容器適配器呢?

適配器(adaptor)是標準庫中通用的概念,包括容器適配器、迭代器適配器和函數適配器。本質上,適配器是使一事物的行為類似于另一事物的行為的一種機制。容器適配器讓一種已存在的容器類型采用另一種不同的抽象類型的工作方式實現。簡單來說其實就是利用現有的容器來適配出來的新容器。

stack

在標準庫中,stack默認使用的是deque容器來進行適配的。
當然這里也可以適配vector容器和list容器。

namespace ZJ
{
	//template<class T,class Container= ZJ::list<T>>
	//template<class T,class Container= ZJ::vector<T>>
	template<class T,class Container= ZJ::deque<T>>
	class stack
	{
	public:
		void pop()
		{
			m_stack.pop_back();
		}
		void push(const T&val)
		{
			m_stack.push_back(val);
		}
		size_t size()	const
		{
			return static_cast<size_t>(m_stack.size());
		}
		T& top()	
		{
			return m_stack.back();
		}
		const T& top() const
		{
			return m_stack.back();
		}
		bool empty()	const
		{
			return m_stack.empty();
		}
	private:
		Container m_stack;
	};
}

queue

與stack一樣,在標準庫中默認使用的是deque容器來進行適配的。

namespace ZJ
{
	template<class T,class Container=ZJ::deque<T>>
	class queue
	{
	public:
		void pop()
		{
			m_queue.pop_front();
		}
		void push(const T& val)
		{
			m_queue.push_back(val);
		}
		size_t size()	const
		{
			return static_cast<size_t>(m_queue.size());
		}
		T& back()
		{
			return m_queue.back();
		}
		const T& back() const
		{
			return m_queue.back();
		}
		T& front()
		{
			return m_queue.front();
		}
		const T& front() const
		{
			return m_queue.front();
		}
		bool empty()	const
		{
			return m_queue.empty();
		}
	private:
		Container m_queue;
	};
}

為什么選擇deque作為stack和queue的底層默認容器

stack是一種后進先出的特殊線性數據結構,因此只要具有push_back()和pop_back()操作的線性結構,都可以作為stack的底層容器,比如vector和list都可以;

queue是先進先出的特殊線性數據結構,只要具有push_back和pop_front操作的線性結構,都可以作為queue的底層容器,比如list。

但是STL中對stack和queue默認選擇deque作為其底層容器,主要是因為:

1.stack和queue不需要遍歷(因此stack和queue沒有迭代器),只需要在固定的一端或者兩端進行操作。

2.在stack中元素增長時,deque比vector的效率高(擴容時不需要搬移大量數據);queue中的元素增長時,deque不僅效率高,而且內存使用率高。

但是deque有一個致命缺陷:不適合遍歷,特別是在遍歷或者排序時,deque的迭代器要頻繁的去檢測其是否移動到某段小空間的邊界,導致效率低下。

“C++中stack與queue的使用方法”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

c++
AI

民权县| 新龙县| 翁牛特旗| 屯昌县| 大荔县| 汉沽区| 鸡西市| 抚宁县| 甘肃省| 新密市| 博客| 桂平市| 霍林郭勒市| 宁夏| 台前县| 滦南县| 龙岩市| 盐津县| 包头市| 辉县市| 利川市| 重庆市| 同德县| 秦安县| 汽车| 城固县| 周至县| 河曲县| 永宁县| 洛南县| 龙里县| 常宁市| 香港| 清原| 凭祥市| 农安县| 贵州省| 栾川县| 福海县| 涟源市| 西安市|