亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

C++ stack與queue模擬實(shí)現(xiàn)詳解

 更新時(shí)間:2021年08月30日 10:53:45   作者:可樂不解渴  
這篇文章主要給大家介紹了關(guān)于c++stack與queue模擬實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧

stack與queue模擬實(shí)現(xiàn)

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

什么是容器適配器呢?

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

stack

在標(biāo)準(zhǔn)庫中,stack默認(rèn)使用的是deque容器來進(jìn)行適配的。
當(dāng)然這里也可以適配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一樣,在標(biāo)準(zhǔn)庫中默認(rèn)使用的是deque容器來進(jìn)行適配的。

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的底層默認(rèn)容器

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

queue是先進(jìn)先出的特殊線性數(shù)據(jù)結(jié)構(gòu),只要具有push_back和pop_front操作的線性結(jié)構(gòu),都可以作為queue的底層容器,比如list。

但是STL中對stack和queue默認(rèn)選擇deque作為其底層容器,主要是因?yàn)椋?/p>

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

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

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

總結(jié)

本片文章就到這里了,希望能夠給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解

    C++ OpenCV學(xué)習(xí)之圖像金字塔與圖像融合詳解

    圖像金字塔分為兩種:高斯金字塔和拉普拉斯金字塔。圖像金字塔在保持細(xì)節(jié)的條件下進(jìn)行圖像融合等多尺度編輯操作非常有用。本文將利用圖像金字塔實(shí)現(xiàn)圖像融合,需要的可以參考一下
    2022-03-03
  • C語言實(shí)現(xiàn)四窗口聊天

    C語言實(shí)現(xiàn)四窗口聊天

    這篇文章主要為大家詳細(xì)介紹了C語言實(shí)現(xiàn)四窗口聊天,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-06-06
  • C語言數(shù)據(jù)結(jié)構(gòu)不掛科指南之線性表詳解

    C語言數(shù)據(jù)結(jié)構(gòu)不掛科指南之線性表詳解

    線性表是由?n(n≥0)個數(shù)據(jù)元素組成的有窮序列,這篇文章主要來和大家來了C語言數(shù)據(jù)結(jié)構(gòu)中的線性表,感興趣的小伙伴可以跟隨小編一起了解一下
    2022-09-09
  • 詳解C語言中結(jié)構(gòu)體的使用

    詳解C語言中結(jié)構(gòu)體的使用

    結(jié)構(gòu)體是一些值的集合,這些值稱為成員變量,結(jié)構(gòu)體的每個成員可以是不同類型的變量。本文將通過示例為大家詳細(xì)講講C語言中結(jié)構(gòu)體的使用,需要的可以參考一下
    2022-07-07
  • C++實(shí)現(xiàn)LeetCode(132.拆分回文串之二)

    C++實(shí)現(xiàn)LeetCode(132.拆分回文串之二)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(132.拆分回文串之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言動態(tài)內(nèi)存管理分析總結(jié)

    C語言中開辟內(nèi)存有很多種方式,目前我們最常用的也就是數(shù)組,但數(shù)組是在我們用到他之前就得設(shè)定好它的長度,有時(shí)很不方便。隨意我們來探究動態(tài)內(nèi)存管理
    2021-11-11
  • QT實(shí)現(xiàn)C++數(shù)據(jù)類與json轉(zhuǎn)換

    QT實(shí)現(xiàn)C++數(shù)據(jù)類與json轉(zhuǎn)換

    這篇文章主要為大家詳細(xì)介紹了如何使用QT實(shí)現(xiàn)C++數(shù)據(jù)類與json轉(zhuǎn)換,文中的示例代碼講解詳細(xì),感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-04-04
  • C語言動態(tài)開辟內(nèi)存詳解

    C語言動態(tài)開辟內(nèi)存詳解

    這篇文章主要為大家詳細(xì)介紹了C語言動態(tài)開辟內(nèi)存,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來幫助
    2022-02-02
  • C++利用libcurl庫實(shí)現(xiàn)多線程文件下載

    C++利用libcurl庫實(shí)現(xiàn)多線程文件下載

    這篇文章主要為大家詳細(xì)介紹了C++如何利用libcurl庫實(shí)現(xiàn)多線程文件下載,文章的示例代碼講解詳細(xì),具有一定的借鑒價(jià)值,有需要的小伙伴可以參考下
    2024-01-01
  • MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    MongoDB?C?驅(qū)動程序安裝(libmongoc)?和?BSON?庫(libbson)方法

    這篇文章主要介紹了安裝?MongoDB?C?驅(qū)動程序?(libmongoc)?和?BSON?庫?(libbson),本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2022-09-09

最新評論