国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

【STL】stack、queue基本使用和模擬實現(xiàn)

這篇具有很好參考價值的文章主要介紹了【STL】stack、queue基本使用和模擬實現(xiàn)。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

目錄

前言

stack

接口介紹

模擬實現(xiàn)

queue

接口介紹

模擬實現(xiàn)

沒有迭代器?

deque介紹


前言

stack 和 queue 本質上是一種容器配接器,就像我們平時充電時使用的電源適配器,能夠將電壓轉換成設備能夠接受的程度。

其通過封裝特定容器作為其底層容器的類,通過一組特定的成員函數(shù)來實現(xiàn)結構的功能。


stack

【STL】stack、queue基本使用和模擬實現(xiàn)

??stack 就是 STL 中封裝好的棧,在使用的時候我們不僅可以指定內部的數(shù)據(jù)類型,還可以指定內部的容器

??不指定容器其實也是可以的,內部的模板參數(shù)有一個缺省值。

int main()
{
	stack<int, vector<int>> s1;     //內部容器為vector
	stack<int, list<int>> s2;       //內部容器為list
    stack<int> s3;                  //內部為默認容器deque
	return 0;
}

接口介紹

??庫中還提供了一系列的接口,我們以前如何使用棧就如何使用 stack 即可,下面用一系列代碼來示例一下。?

【STL】stack、queue基本使用和模擬實現(xiàn)

int main()
{
	stack<int> s;
	s.push(5);          //5
	s.push(6);          //5 6
	s.push(7);          //5 6 7
	s.push(8);          //5 6 7 8
	cout << s.size() << endl;   //打印棧的大小
	while (!s.empty())        //直到棧為空循環(huán)
	{
		cout << s.top() << endl;   //打印棧頂元素
		s.pop();                   //出棧
	}
	return 0;
}

?【STL】stack、queue基本使用和模擬實現(xiàn)

模擬實現(xiàn)

??根據(jù)庫中接口簡單地實現(xiàn)一下 stack,需要注意的是這里復用的接口需要確保幾個底部容器都要同時擁有。

namespace Alpaca
{
	template<class T,class Container = deque<T>>
	class stack
	{
	public:
		void push(const T& x)    //入棧
		{
			_con.push_back(x);   //設置尾端為棧頂,入棧即尾插
		}

		void pop()               //出棧
		{
			_con.pop_back();
		}

		const T& top()           //獲取棧頂元素
		{
			return _con.back();  //獲取最后一個元素
		}

		size_t size()            //獲取棧的大小
		{
			return _con.size();  //返回容器的大小
		}

		bool empty()              //棧的判空
		{
			return _con.empty();  //返回容器的判空
		} 

	private:
		Container _con;      //容器對象
	};
}

queue

??queue 則是封裝出來的隊列,與 stack 相反遵循著先進先出的原則(FIFO)。

【STL】stack、queue基本使用和模擬實現(xiàn)

??通過查詢資料我們還發(fā)現(xiàn),要作為 queue 的容器還需要支持以下操作:

【STL】stack、queue基本使用和模擬實現(xiàn)

??同樣,使用 queue 時模板參數(shù)有兩個,分別是內部元素的類型和內部容器,且內部容器缺省為 deque。

int main()
{
	queue<int> q1;                //傳遞缺省模板參數(shù)
	queue<int, list<int>> q2;     //指定內部容器為list
	return 0;
}

接口介紹

??隊列與棧相反,其只在隊尾入隊,在隊頭出隊。我們可以通過實例代碼簡單使用一下。

【STL】stack、queue基本使用和模擬實現(xiàn)

int main()
{
	queue<int> q;
	cout << "size is: " << q.size() << endl;   //查看隊列大小
	q.push(1);                                 //數(shù)據(jù)入隊
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);
	cout << "size is: " << q.size() << endl;   
	cout << "first is: " << q.front() << endl; //查看首元素
	cout << "last is: " << q.back() << endl;   //查看最后一個元素
	while (!q.empty())                         //直到隊空循環(huán)
	{
		cout << q.front() << " ";              //打印隊頭
		q.pop();                               //出隊
	}
	cout << endl;
	cout << "size is: " << q.size() << endl;   //查看隊列大小
	return 0;
}

模擬實現(xiàn)

??由于是泛型在使用的時候并不會對內部函數(shù)進行提示,簡單理解就是我們復用對應容器的接口來實現(xiàn)隊列的接口函數(shù)。

namespace Alpaca
{
	template<class T,class Container = deque<T>>
	class queue
	{
	public:
		void push(const T& x)        //入隊
		{
			_con.push_back(x);       //尾插
		}

		void pop()                   //出隊
		{
			_con.pop_front();        //頭刪
		} 

		const T& front()             //獲取隊頭元素
		{
			return _con.front();
		}

		const T& back()              //獲取對尾元素
		{
			return _con.back();
		}

		size_t size()                //獲取隊列大小
		{
			return _con.size();      //獲取容器大小
		}

		bool empty()                 //隊列判空
		{
			return _con.empty();     //容器判空
		}

	private:
		Container _con;
	};

}

沒有迭代器?

??因為無論是 stack 和 queue?都是根據(jù)其特定的順序進行元素的插入和刪除,因此二者都不提供走訪功能,也不提供迭代器。

deque介紹

??在出現(xiàn) vector 和 list 之后,有人想到 vector 能夠隨機讀取,但擴容和隨機插入刪除效率較低,而 list 插入刪除效率都極高卻無法隨機訪問,能不能實現(xiàn)一個結構能夠同時兼顧 vector 和 list 的優(yōu)點呢?

??于是 deque 就誕生了,deque 又叫雙端隊列,即一種雙向開口的連續(xù)線性空間。

【STL】stack、queue基本使用和模擬實現(xiàn)

??為了兼顧雙端插入以及隨機訪問,deque 的底層是使用一個中控數(shù)組來管理一個個連續(xù)的空間,且第一個空間被開辟出來后是存放在中控數(shù)組的中央位置,之后不斷插入數(shù)據(jù),若一塊連續(xù)空間已滿只需要再開一塊連續(xù)空間即可。也就是在中控數(shù)組中再增加一個指針。

??若是進行頭插,則需要開辟一段新空間,將新的值存于連續(xù)空間的尾部。

【STL】stack、queue基本使用和模擬實現(xiàn)

??得益于這種結構,即便是擴容所帶來的拷貝消耗也是極低的,實際上不會像 vector 那樣復雜的深拷貝,而只是對中控數(shù)組中的指針進行拷貝。同時? deque 也支持隨機訪問,只要直到每個連續(xù)空間的大小通過簡單的計算便可以實現(xiàn)隨機訪問。

??若 deque 有這么多的有點,那為什么它還沒有取代 vector 和 list 呢?這就不得不提到 deque 最為雞肋的地方了,中部的插入刪除操作相當復雜,若是直接在中部插入就要挪動當前空間的數(shù)據(jù),更甚者還要牽扯到接下來的連續(xù)空間。不僅如此 deque 提供的優(yōu)點不如?vector 和 list 那樣極致,這也是為什么?deque 代替不了二者的原因。

??但若是有一種容器并不需要中間的插入刪除,只需要在兩端進行插入刪除呢?于是 deque 就成為了適合 stack 和 queue 實現(xiàn)的內部容器。


??好了,今天 stack、queue基本使用和模擬實現(xiàn)?的相關內容到這里就結束了,如果這篇文章對你有用的話還請留下你的三連加關注。文章來源地址http://www.zghlxwxcb.cn/news/detail-471361.html

到了這里,關于【STL】stack、queue基本使用和模擬實現(xiàn)的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【C++】STL中的容器適配器 stack queue 和 priority_queue 的模擬實現(xiàn)

    【C++】STL中的容器適配器 stack queue 和 priority_queue 的模擬實現(xiàn)

    適配器是一種設計模式 (設計模式是一套被反復使用的、多數(shù)人知曉的、經過分類編目的、代碼設計經驗的總結),該種模式是將一個類的接口轉換成客戶希望的另外一個接口。 例如我們常見的充電器就是一種適配器,它將我們常用的220V交流電壓轉化為4,5V (或者其他更高的電

    2023年04月26日
    瀏覽(24)
  • 容器適配器---deque和STL ---stack queue priority_queue的模擬實現(xiàn) C++

    目錄 一、容器適配器 deque原理 deque的缺陷 deque的優(yōu)勢 二、stack的模擬實現(xiàn) ?三、queue的模擬實現(xiàn) 四、優(yōu)先級隊列的模擬實現(xiàn) 適配器是一種設計模式(設計模式是一套被反復使用的、多數(shù)人知曉的、經過分類編目的、代碼設計經驗的總結),該種模式是將一個類的接口轉換成客戶

    2024年02月02日
    瀏覽(26)
  • C++入門之stl六大組件--stack和queue源碼深度剖析及模擬實現(xiàn)

    目錄 前言 一、stack的介紹和使用 1.stack的介紹 2.stack的使用 3.stack的模擬實現(xiàn) 二、queue的介紹和使用 1.queue的介紹 2.queue的使用 3.queue的模擬實現(xiàn) 三、priority_queue的介紹和使用 1.priority_queue的介紹 2.priority_queue的使用 3.priority_queue的模擬實現(xiàn) 3.1解決一個topK問題 四、容器適配器 1

    2024年02月14日
    瀏覽(22)
  • STL之stack+queue的使用及其實現(xiàn)

    STL之stack+queue的使用及其實現(xiàn)

    所屬專欄:C“嘎嘎\\\" 系統(tǒng)學習?? ?? 博主首頁:初陽785?? ?? 代碼托管:chuyang785?? ?? 感謝大家的支持,您的點贊和關注是對我最大的支持?。。?? ?? 博主也會更加的努力,創(chuàng)作出更優(yōu)質的博文!!?? stack的文檔介紹 stack是一種容器適配器,專門用在具有后進先

    2024年02月21日
    瀏覽(15)
  • STL容器適配器 -- stack和queue(使用+實現(xiàn))(C++)

    STL容器適配器 -- stack和queue(使用+實現(xiàn))(C++)

    棧和隊列數(shù)據(jù)結構+畫圖分析如果對棧和隊列的結構不了解的,可以先看該鏈接的內容 使用stack時需要頭文件 #includestack stack是一種容器適配器,用于具有 后進先出 (LIFO)的環(huán)境中。只能從容器的一端(棧頂),執(zhí)行刪除、插入和提取操作。 stack是作為容器適配器實現(xiàn)的,容器

    2024年02月14日
    瀏覽(30)
  • [STL]stack和queue使用介紹

    [STL]stack和queue使用介紹

    stack介紹 stack是一種 容器適配器 ,專門用在具有后進先出操作的上下文環(huán)境中,其刪除只能從容器的一端進行元素的插入與提取操作。 stack是作為容器適配器被實現(xiàn)的,容器適配器即是對特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來訪問其元素,將特定類作為

    2024年02月15日
    瀏覽(20)
  • 【STL】priority_queue的使用及模擬實現(xiàn)

    【STL】priority_queue的使用及模擬實現(xiàn)

    目錄 前言 priority_queue的使用 功能解析 基本接口 寫點題目 模擬實現(xiàn) 結構解析 插入刪除 調整函數(shù)結合仿函數(shù) 仿函數(shù)介紹 結合使用 其他功能 接口補齊 迭代器區(qū)間構造 ??打開 queue 頭文件后,我們發(fā)現(xiàn)除了我們之前介紹過的普通隊列以外,還有一個 priority_queue 。 ??其又名為

    2024年02月08日
    瀏覽(20)
  • 【STL】stack與queue的底層原理及其實現(xiàn)

    【STL】stack與queue的底層原理及其實現(xiàn)

    (圖片來自知乎) 1.stack是一種 容器適配器 ,模擬了棧的數(shù)據(jù)結構。數(shù)據(jù)只能從一端進去,另一端出來( 先進后出 )。 2.stack適配器 默認是由 deque 容器實現(xiàn) 的,也可以顯示要求stack的底層封裝的容器類型。由于棧的特性, array 和 forward_list 不能用來構造stack適配器 。 3.st

    2024年04月10日
    瀏覽(20)
  • 【STL詳解 —— priority_queue的使用與模擬實現(xiàn)】

    【STL詳解 —— priority_queue的使用與模擬實現(xiàn)】

    std::priority_queue 是 C++ 標準庫中的容器適配器,它提供了一種基于堆的優(yōu)先級隊列實現(xiàn)。優(yōu)先級隊列是一種特殊的隊列,其中的元素按照一定的優(yōu)先級順序排列,而不是按照它們被插入的順序。 在 std::priority_queue 中,插入元素時會根據(jù)元素的值自動進行排序,最大(或最?。?/p>

    2024年04月17日
    瀏覽(19)
  • stack&queue的模擬實現(xiàn)

    stack&queue的模擬實現(xiàn)

    stack模擬: stack的源代碼: stack的全部源代碼就這些。 stack的代碼少,原因在于采用了適配器模式,所謂適配器,以電器為例,每個電器都有電源適配器,中國的家用電源為220V的交流電,但是幾乎沒有電器需要220V的交流電,所以每個電器都有一個電源適配器,將家庭電壓轉換

    2024年02月06日
    瀏覽(21)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包