欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

什么是容器適配器呢?

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

stack

在標(biāo)準(zhǔn)庫(kù)中,stack默認(rèn)使用的是deque容器來(lái)進(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)庫(kù)中默認(rèn)使用的是deque容器來(lái)進(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中對(duì)stack和queue默認(rèn)選擇deque作為其底層容器,主要是因?yàn)椋?/p>

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

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

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

總結(jié)

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

相關(guān)文章

  • C/C++中的atan和atan2函數(shù)實(shí)例用法

    C/C++中的atan和atan2函數(shù)實(shí)例用法

    在本篇文章里小編給大家分享的是一篇關(guān)于C/C++中的atan和atan2函數(shù)實(shí)例用法相關(guān)內(nèi)容,有興趣的朋友們可以學(xué)習(xí)下。
    2020-02-02
  • 使用C語(yǔ)言實(shí)現(xiàn)掃雷游戲

    使用C語(yǔ)言實(shí)現(xiàn)掃雷游戲

    這篇文章主要為大家詳細(xì)介紹了使用C語(yǔ)言實(shí)現(xiàn)掃雷游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-08-08
  • C++遍歷文件夾下的所有文件

    C++遍歷文件夾下的所有文件

    數(shù)據(jù)分多個(gè)文件存儲(chǔ),讀取數(shù)據(jù)就需要對(duì)多個(gè)文件進(jìn)行操作。下面通過(guò)實(shí)例代碼給大家講解C++遍歷文件夾下的所有文件,感興趣的的朋友一起看看吧
    2017-08-08
  • C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列代碼

    C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列代碼

    這篇文章主要為大家詳細(xì)介紹了C語(yǔ)言實(shí)現(xiàn)鏈隊(duì)列代碼,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2018-07-07
  • Qt中Tab與Tree組件實(shí)現(xiàn)分頁(yè)菜單

    Qt中Tab與Tree組件實(shí)現(xiàn)分頁(yè)菜單

    本文主要介紹tabWidget選擇夾組件與TreeWidget樹(shù)形選擇組件的常用方法及靈活運(yùn)用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-12-12
  • c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)

    c++雙向鏈表操作示例(創(chuàng)建雙向鏈、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等)

    這篇文章主要介紹了c++雙向鏈表操作示例,包括創(chuàng)建雙向鏈、刪除雙向鏈表、雙向鏈表中查找數(shù)據(jù)、插入數(shù)據(jù)等,需要的朋友可以參考下
    2014-05-05
  • C語(yǔ)言函數(shù)之memcpy函數(shù)用法實(shí)例

    C語(yǔ)言函數(shù)之memcpy函數(shù)用法實(shí)例

    memcpy函數(shù)用于把資源內(nèi)存(src所指向的內(nèi)存區(qū)域)拷貝到目標(biāo)內(nèi)存(dest所指向的內(nèi)存區(qū)域),下面這篇文章主要給大家介紹了關(guān)于C語(yǔ)言函數(shù)之memcpy函數(shù)用法的相關(guān)資料,文中通過(guò)實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-08-08
  • C語(yǔ)言中關(guān)于指針變量的坑

    C語(yǔ)言中關(guān)于指針變量的坑

    這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中關(guān)于指針變量坑的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2021-04-04
  • C語(yǔ)言中炫酷的文件操作實(shí)例詳解

    C語(yǔ)言中炫酷的文件操作實(shí)例詳解

    內(nèi)存中的數(shù)據(jù)都是暫時(shí)的,當(dāng)程序結(jié)束時(shí),它們都將丟失,為了永久性的保存大量的數(shù)據(jù),C語(yǔ)言提供了對(duì)文件的操作,這篇文章主要給大家介紹了關(guān)于C語(yǔ)言中文件操作的相關(guān)資料,需要的朋友可以參考下
    2021-10-10
  • C語(yǔ)言 指針與數(shù)組的詳解及區(qū)別

    C語(yǔ)言 指針與數(shù)組的詳解及區(qū)別

    這篇文章主要介紹了C語(yǔ)言 指針與數(shù)組的詳解及對(duì)比的相關(guān)資料,需要的朋友可以參考下
    2017-03-03

最新評(píng)論