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

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

這篇具有很好參考價(jià)值的文章主要介紹了【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

1. 前言

今天我們來(lái)學(xué)習(xí)C++stl六大組件的其中一種,容器適配器,stack、queue及priority_queue都是容器適配器。我們循序漸進(jìn),接下來(lái)讓我們先認(rèn)識(shí)一下什么是容器適配器。

2. 容器適配器

2.1 容器適配器的介紹

適配器是一種設(shè)計(jì)模式(設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)),該種模式是將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。

2.2 STL標(biāo)準(zhǔn)庫(kù)中stack和queue的底層結(jié)構(gòu)

雖然stack和queue中也可以存放元素,但在STL中并沒(méi)有將其劃分在容器的行列,而是將其稱為容器適配器,這是因?yàn)閟tack和隊(duì)列只是對(duì)其他容器的接口進(jìn)行了包裝,STL中stack和queue默認(rèn)使用deque。比如:

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)
【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

2.3 deque的簡(jiǎn)單介紹

deque(雙端隊(duì)列):是一種雙開(kāi)口的"連續(xù)"空間的數(shù)據(jù)結(jié)構(gòu),雙開(kāi)口的含義是:可以在頭尾兩端進(jìn)行插入和刪除操作,且時(shí)間復(fù)雜度為O(1),與vector比較,頭插效率高,不需要搬移元素;與list比較,空間利用率比較高。

deque并不是真正連續(xù)的空間,而是由一段段連續(xù)的小空間拼接而成的,實(shí)際deque類似于一個(gè)動(dòng)態(tài)的二維數(shù)組,雙端隊(duì)列底層是一段假象的連續(xù)空間,實(shí)際是分段連續(xù)的,為了維護(hù)其“整體連續(xù)”以及隨機(jī)訪問(wèn)的假象,落在了deque的迭代器身上,因此deque的迭代器設(shè)計(jì)就比較復(fù)雜。

2.4 deque的缺陷

與vector比較:
deque的優(yōu)勢(shì)是:頭部插入和刪除時(shí),不需要搬移元素,效率特別高,而且在擴(kuò)容時(shí),也不需要搬移大量的元素,因此其效率是必vector高的。
與list比較:
其底層是連續(xù)空間,空間利用率比較高,不需要存儲(chǔ)額外字段。
但是,deque有一個(gè)致命缺陷:
不適合遍歷,因?yàn)樵诒闅v時(shí),deque的迭代器要頻繁的去檢測(cè)其是否移動(dòng)到某段小空間的邊界,導(dǎo)致效率低下,而序列式場(chǎng)景中,可能需要經(jīng)常遍歷,因此在實(shí)際中,需要線性結(jié)構(gòu)時(shí),大多數(shù)情況下優(yōu)先考慮vector和list,deque的應(yīng)用并不多,而目前能看到的一個(gè)應(yīng)用就是,STL用其作為stack和queue的底層數(shù)據(jù)結(jié)構(gòu)。

2.5 為什么選擇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)椋?br> 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)存使用率高。

3. stack

3.1 stack的介紹

1.stack是一種容器適配器,專門用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行元素的插入與提取操作。
2.stack是作為容器適配器被實(shí)現(xiàn)的,容器適配器即是對(duì)特定類封裝作為其底層的容器,并提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素,將特定類作為其底層的,元素特定容器的尾部(即棧頂)被壓入和彈出。
3.stack的底層容器可以是任何標(biāo)準(zhǔn)的容器類模板或者一些其他特定的容器類,這些容器類應(yīng)該支持以下操作:
empty:判空操作
back:獲取尾部元素操作
push_back:尾部插入元素操作
pop_back:尾部刪除元素操作
4.標(biāo)準(zhǔn)容器vector、deque、list均符合這些需求,默認(rèn)情況下,如果沒(méi)有為stack指定特定的底層容器,默認(rèn)情況下使用deque。

3.2 stack的使用

函數(shù)名稱 功能說(shuō)明
stack() 構(gòu)造空的棧
empty() 檢測(cè)stack是否為空
size() 返回stack中元素的個(gè)數(shù)
top() 返回棧頂元素的引用
push() 將元素val壓入stack中
pop() 將stack中尾部的元素彈出
void Test1()
{
	//fiora::stack<int,vector<int>> st;
	//fiora::stack<int, list<int>> st;
	//fiora::stack<int> st;
	//stack<int,vector<int>> st;
	//stack<int, list<int>> st;
	stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
	st.push(5);

	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

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

namespace fiora
{
	template<class T, class Container = deque<T>>
	class stack
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

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

		T& top()
		{
			return _con.back();
		}

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

		bool empty() const
		{
			return _con.empty();
		}

		size_t size() const
		{
			return _con.size();
		}


	private:
		Container _con;
	};
}

測(cè)試:

void Test1()
{
	//fiora::stack<int,vector<int>> st;
	fiora::stack<int, list<int>> st1;
	fiora::stack<int> st;
	//stack<int,vector<int>> st;
	//stack<int, list<int>> st;
	//stack<int> st;
	st.push(1);
	st.push(2);
	st.push(3);
	st.push(4);
	st.push(5);

	while (!st.empty())
	{
		cout << st.top() << " ";
		st.pop();
	}

}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

4. queue

4.1 queue的介紹

1.隊(duì)列是一種容器適配器,專門用于在FIFO上下文(先進(jìn)先出)中操作,其中從容器一端插入元素,另一端提取元素。
2.隊(duì)列作為容器適配器實(shí)現(xiàn),容器適配器即將特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素。元素從隊(duì)尾入隊(duì)列,從隊(duì)頭出隊(duì)列。
3.底層容器可以是標(biāo)準(zhǔn)容器類模板之一,也可以是其他專門設(shè)計(jì)的容器類。該底層容器應(yīng)至少支持以下操作:
empty:檢測(cè)隊(duì)列是否為空
size:返回隊(duì)列中有效元素的個(gè)數(shù)
front:返回隊(duì)頭元素的引用
back:返回隊(duì)尾元素的引用
push_back:在隊(duì)列尾部入隊(duì)列
pop_front:在隊(duì)列頭部出隊(duì)列
4.標(biāo)準(zhǔn)容器類deque和list滿足了這些要求。默認(rèn)情況下,如果沒(méi)有為queue實(shí)例化指定容器類,則使用標(biāo)準(zhǔn)容器deque。

4.2 queue的使用

函數(shù)名稱 功能說(shuō)明
queue() 構(gòu)造空的隊(duì)列
empty() 檢測(cè)隊(duì)列是否為空
size() 返回隊(duì)列中有效元素的個(gè)數(shù)
front() 返回隊(duì)頭元素的引用
back() 返回隊(duì)尾元素的引用
push() 在隊(duì)尾將元素val入隊(duì)
pop() 將隊(duì)頭元素出隊(duì)
void Test2()
{
	//fiora::queue<int> q;
	//fiora::queue<int, list<int>> q;
	//fiora::queue<int, vector<int>> q;錯(cuò)誤,vector不支持頭刪
	queue<int> q;
	//queue<int, list<int>> q;
	//queue<int, vector<int>> q;錯(cuò)誤,vector不支持頭刪
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);

	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

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

namespace fiora
{
	template<class T, class Container = deque<T>>
	class queue
	{
	public:
		void push(const T& x)
		{
			_con.push_back(x);
		}

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

		T& back()
		{
			return _con.back();
		}

		T& front()
		{
			return _con.front();
		}

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

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


		bool empty() const
		{
			return _con.empty();
		}

		size_t size() const
		{
			return _con.size();
		}

	private:
		Container _con;
	};
}

測(cè)試:

void Test2()
{
	fiora::queue<int> q;
	fiora::queue<int, list<int>> q1;
	//fiora::queue<int, vector<int>> q;錯(cuò)誤,vector不支持頭刪
	//queue<int> q;
	//queue<int, list<int>> q;
	//queue<int, vector<int>> q;錯(cuò)誤,vector不支持頭刪
	q.push(1);
	q.push(2);
	q.push(3);
	q.push(4);
	q.push(5);

	while (!q.empty())
	{
		cout << q.front() << " ";
		q.pop();
	}
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

5. priority_queue(優(yōu)先隊(duì)列)

5.1 優(yōu)先隊(duì)列的介紹

優(yōu)先級(jí)隊(duì)列默認(rèn)使用vector作為其底層存儲(chǔ)數(shù)據(jù)的容器,在vector上又使用了堆算法將vector中元素構(gòu)造成堆的結(jié)構(gòu),因此priority_queue就是堆,所有需要用到堆的位置,都可以考慮使用priority_queue。注意:默認(rèn)情況下priority_queue是大堆。

1.優(yōu)先隊(duì)列是一種容器適配器,根據(jù)嚴(yán)格的弱排序標(biāo)準(zhǔn),它的第一個(gè)元素總是它所包含的元素中最大的。
2.此上下文類似于堆,在堆中可以隨時(shí)插入元素,并且只能檢索最大堆元素(優(yōu)先隊(duì)列中位于頂部的元素)。
3.優(yōu)先隊(duì)列被實(shí)現(xiàn)為容器適配器,容器適配器即將特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素。元素從特定容器的“尾部”彈出,其稱為優(yōu)先隊(duì)列的頂部。
4.底層容器可以是任何標(biāo)準(zhǔn)容器類模板,也可以是其他特定設(shè)計(jì)的容器類。容器應(yīng)該可以通過(guò)隨機(jī)訪問(wèn)迭代器訪問(wèn),并支持以下操作:
empty():檢測(cè)容器是否為空
size():返回容器中有效元素個(gè)數(shù)
front():返回容器中第一個(gè)元素的引用
push_back():在容器尾部插入元素
pop_back():刪除容器尾部元素
5.標(biāo)準(zhǔn)容器類vector和deque滿足這些需求。默認(rèn)情況下,如果沒(méi)有為特定的priority_queue類實(shí)例化指定容器類,則使用vector。
6.需要支持隨機(jī)訪問(wèn)迭代器,以便始終在內(nèi)部保持堆結(jié)構(gòu)。容器適配器通過(guò)在需要時(shí)自動(dòng)調(diào)用算法函數(shù)make_heap、push_heap和pop_heap來(lái)自動(dòng)完成此操作。

5.2 優(yōu)先隊(duì)列的使用

函數(shù)名稱 功能說(shuō)明
priority_queue()/priority_queue(first,last) 構(gòu)造空的優(yōu)先隊(duì)列
empty() 檢測(cè)優(yōu)先隊(duì)列是否為空
top() 返回優(yōu)先級(jí)隊(duì)列中最大(最小元素),即堆頂元素
push() 在優(yōu)先級(jí)隊(duì)列中插入元素val
pop() 刪除優(yōu)先級(jí)隊(duì)列中最大(最小)元素,即堆頂元素
void Test3()
{
	priority_queue<int> pq;
	//fiora::priority_queue<int> pq;

	pq.push(3);
	pq.push(1);
	pq.push(2);
	pq.push(5);
	pq.push(1);
	pq.push(4);
	pq.push(0);

	while (!pq.empty())
	{
		cout << pq.top() << " ";
		pq.pop();
	}
	cout << endl;
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

void Test4()
{
int a[] = { 5,4,6,9,1,2,3,0,8,7 };
	//fiora::priority_queue<int> heap(a, a + sizeof(a) / sizeof(int));
	//fiora::priority_queue<int> heap(a, a + sizeof(a) / sizeof(int));
	//fiora::priority_queue<int, vector<int>, greater<int>> heap(a, a + sizeof(a) / sizeof(int));
	priority_queue<int, vector<int>, greater<int>> heap(a, a + sizeof(a) / sizeof(int));

	while (!heap.empty())
	{
		cout << heap.top() << " ";
		heap.pop();
	}	
	cout << endl;
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

5.3 優(yōu)先隊(duì)列模擬實(shí)現(xiàn)

namespace fiora
{
	//大堆
	template<class T, class Container = vector<T>, class Compare = less<T>>
	class priority_queue
	{
	public:

		priority_queue()
		{}

		template<class InputIterator>
		priority_queue(InputIterator first, InputIterator last)
		{
			while (first != last)
			{
				_con.push_back(*first);
				first++;
			}

			//建堆
			for (int i = (_con.size() - 1 - 1) / 2; i >= 0; i--)
			{
				adjust_down(i);
			}

		}


		void adjust_up(size_t child)
		{
			Compare com;
			size_t parent = (child - 1) / 2;
			while (child > 0)
			{
				if (com(_con[parent], _con[child]))
				{
					std::swap(_con[child], _con[parent]);
					child = parent;
					parent = (child - 1) / 2;
				}
				else
				{
					break;
				}
			}
		}

		void adjust_down(size_t parent)
		{
			Compare com;
			size_t child = parent * 2 + 1;
			while (child < _con.size())
			{
				if (child + 1 < _con.size() && com(_con[child], _con[child + 1]))
				{
					child++;
				}

				if (com(_con[parent], _con[child]))
				{
					std::swap(_con[child], _con[parent]);
					parent = child;
					child = parent * 2 + 1;
				}
				else
				{
					break;
				}
			}
		}

		void push(const T& x)
		{
			_con.push_back(x);
			adjust_up(_con.size() - 1);
		}

		void pop()
		{
			std::swap(_con[0], _con[_con.size() - 1]);
			_con.pop_back();
			adjust_down(0);
		}

		const T& top()
		{
			return _con[0];
		}

		bool empty() const
		{
			return _con.empty();
		}

		size_t size() const
		{
			return _con.size();
		}


	private:
		Container _con;
	};
}

測(cè)試:

void Test3()
{
	//priority_queue<int> pq;
	fiora::priority_queue<int> pq;
	
	pq.push(3);
	pq.push(1);
	pq.push(2);
	pq.push(5);
	pq.push(1);
	pq.push(4);
	pq.push(0);

	while (!pq.empty())
	{
		cout << pq.top() << " ";
		pq.pop();
	}
	cout << endl;


	int a[] = { 5,4,6,9,1,2,3,0,8,7 };
	//fiora::priority_queue<int> heap(a, a + sizeof(a) / sizeof(int));
	fiora::priority_queue<int> heap1(a, a + sizeof(a) / sizeof(int));
	fiora::priority_queue<int, vector<int>, greater<int>> heap(a, a + sizeof(a) / sizeof(int));
	//priority_queue<int, vector<int>, greater<int>> heap(a, a + sizeof(a) / sizeof(int));

	while (!heap.empty())
	{
		cout << heap.top() << " ";
		heap.pop();
	}
	
	cout << endl;
}

【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)

6. 結(jié)尾

關(guān)于棧和隊(duì)列的學(xué)習(xí)我們就告一段落了,棧和隊(duì)列和之前學(xué)習(xí)的容器一樣,使用方法都非常簡(jiǎn)單,最重要的是要能夠理解它們的底層原理,以便靈活使用。
最后,感謝各位大佬的耐心閱讀和支持,覺(jué)得本篇文章寫的不錯(cuò)的朋友可以三連關(guān)注支持一波,如果有什么問(wèn)題或者本文有錯(cuò)誤的地方大家可以私信我,也可以在評(píng)論區(qū)留言討論,再次感謝各位。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-479364.html

到了這里,關(guān)于【C++】——棧和隊(duì)列(stack、queue)及優(yōu)先隊(duì)列(priority_queue)的介紹和模擬實(shí)現(xiàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 【C++初階】模擬實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列priority_queue

    【C++初階】模擬實(shí)現(xiàn)優(yōu)先級(jí)隊(duì)列priority_queue

    ??個(gè)人主頁(yè):@Weraphael ???作者簡(jiǎn)介:目前學(xué)習(xí)C++和算法 ??專欄:C++航路 ?? 希望大家多多支持,咱一起進(jìn)步!?? 如果文章對(duì)你有幫助的話 歡迎 評(píng)論?? 點(diǎn)贊???? 收藏 ?? 加關(guān)注? 優(yōu)先級(jí)隊(duì)列顧名思義就是 按優(yōu)先級(jí)出隊(duì)列 priority_queue 是一個(gè)容器適配器,默認(rèn)使用

    2024年02月10日
    瀏覽(21)
  • 【C++】詳解priority_queue(優(yōu)先級(jí)隊(duì)列)與函數(shù)對(duì)象

    【C++】詳解priority_queue(優(yōu)先級(jí)隊(duì)列)與函數(shù)對(duì)象

    目錄 一、priority_queue 的介紹和使用 1.1priority_queue 的介紹 2.2priority_queue 的使用 二、仿函數(shù) 2.1什么是仿函數(shù) 2.2仿函數(shù)的作用 三、函數(shù)對(duì)象的特點(diǎn)(知識(shí)點(diǎn)多) 3.1分析特點(diǎn)5(比較普通函數(shù)與函數(shù)對(duì)象) 3.1.1利用普通函數(shù)傳遞參數(shù) 拓展之:深度剖析函數(shù)利用模板的本質(zhì) 3.1.2利用

    2024年02月08日
    瀏覽(21)
  • C++——優(yōu)先級(jí)隊(duì)列(priority_queue)的使用及實(shí)現(xiàn)

    C++——優(yōu)先級(jí)隊(duì)列(priority_queue)的使用及實(shí)現(xiàn)

    目錄 一.priority_queue的使用 1.1、基本介紹 1.2、優(yōu)先級(jí)隊(duì)列的定義 1.3、基本操作(常見(jiàn)接口的使用) 1.4、重寫仿函數(shù)支持自定義數(shù)據(jù)類型 二.priority_queue的模擬實(shí)現(xiàn) 2.1、構(gòu)造重要的調(diào)整算法 2.2、常見(jiàn)接口的實(shí)現(xiàn) push() pop() top() empty()、size() ?三.利用仿函數(shù)改進(jìn)調(diào)整算法 我們之前

    2024年02月02日
    瀏覽(18)
  • 【C++入門到精通】C++入門 —— priority_queue(STL)優(yōu)先隊(duì)列

    【C++入門到精通】C++入門 —— priority_queue(STL)優(yōu)先隊(duì)列

    ?文章綁定了VS平臺(tái)下std::priority_queue的源碼,大家可以下載了解一下?? 前面我們講了C語(yǔ)言的基礎(chǔ)知識(shí),也了解了一些數(shù)據(jù)結(jié)構(gòu),并且講了有關(guān)C++的命名空間的一些知識(shí)點(diǎn)以及關(guān)于C++的缺省參數(shù)、函數(shù)重載,引用 和 內(nèi)聯(lián)函數(shù)也認(rèn)識(shí)了什么是類和對(duì)象以及怎么去new一個(gè) ‘對(duì)象

    2024年02月12日
    瀏覽(27)
  • 【C++】STL使用仿函數(shù)控制優(yōu)先級(jí)隊(duì)列priority_queue

    【C++】STL使用仿函數(shù)控制優(yōu)先級(jí)隊(duì)列priority_queue

    本文章講解C++STL的容器適配器:priority_queue的實(shí)現(xiàn),并實(shí)現(xiàn)仿函數(shù)控制priority_queue底層。 priority_queue叫做優(yōu)先級(jí)隊(duì)列,它的底層結(jié)構(gòu)是堆,在庫(kù)中,默認(rèn)生成的是大堆 在庫(kù)的實(shí)現(xiàn)中,使用vector作為該優(yōu)先級(jí)隊(duì)列的適配容器。 由于priority_queue也是一個(gè)適配器,所以它的接口函數(shù)

    2024年02月16日
    瀏覽(30)
  • 【C++】STL優(yōu)先級(jí)隊(duì)列(priority_queue)功能介紹以及模擬實(shí)現(xiàn)

    【C++】STL優(yōu)先級(jí)隊(duì)列(priority_queue)功能介紹以及模擬實(shí)現(xiàn)

    點(diǎn)進(jìn)來(lái)的小伙伴不知道學(xué)過(guò)數(shù)據(jù)結(jié)構(gòu)里的堆沒(méi)有,如果學(xué)過(guò)的話,那就好說(shuō)了,優(yōu)先級(jí)隊(duì)列就是堆,如果沒(méi)學(xué)過(guò),沒(méi)關(guān)系,可以參考一下我之前寫的一篇關(guān)于堆的博客,可以點(diǎn)進(jìn)去看看:【數(shù)據(jù)結(jié)構(gòu)】堆(包含堆排序和TOPK問(wèn)題) 那么了解過(guò)堆了的話,我就不講那么細(xì)致了,

    2024年02月16日
    瀏覽(22)
  • 【C++航海王:追尋羅杰的編程之路】priority_queue(優(yōu)先隊(duì)列) | 容器適配器你知道哪些?

    【C++航海王:追尋羅杰的編程之路】priority_queue(優(yōu)先隊(duì)列) | 容器適配器你知道哪些?

    目錄 1 -?priority_queue的介紹和使用 1.1 -?priority_queue的介紹 1.2 -?priority_queue的使用 1.3 -?priority_queue的模擬實(shí)現(xiàn) 2 - 容器適配器 2.1 - 什么是適配器 2.2 - STL標(biāo)準(zhǔn)庫(kù)中stack和queue的底層結(jié)構(gòu) 2.3 - deque的介紹 2.3.1 - deque的原理介紹 2.3.2 - deque的缺陷 2.4 - 為什么選擇deque作為stack和queue的底

    2024年04月10日
    瀏覽(46)
  • 優(yōu)先級(jí)隊(duì)列priority_queue

    優(yōu)先級(jí)隊(duì)列priority_queue

    關(guān)于less建大根堆,輸出降序序列,greater建小根堆,輸出升序序列,這點(diǎn)和sort()函數(shù)相反,參考我的這篇博客 底層原理 priority_queue底層維護(hù)著一個(gè)對(duì)應(yīng)類型的,vector物理結(jié)構(gòu),但相當(dāng)于堆排序的結(jié)構(gòu),這個(gè)vector邏輯結(jié)構(gòu)是一個(gè)二叉堆; 每次 插入數(shù)據(jù) ,我們插在堆尾(vector尾),

    2024年02月16日
    瀏覽(17)
  • 【C++】STL——容器適配器priority_queue(優(yōu)先級(jí)隊(duì)列)詳解 及 仿函數(shù)的介紹和使用

    【C++】STL——容器適配器priority_queue(優(yōu)先級(jí)隊(duì)列)詳解 及 仿函數(shù)的介紹和使用

    這篇文章我們接著上一篇的內(nèi)容,再來(lái)學(xué)一個(gè)STL里的容器適配器—— priority_queue (優(yōu)先級(jí)隊(duì)列) 1.1 priority_queue的介紹 我們上一篇文章學(xué)了 queue (隊(duì)列),那優(yōu)先級(jí)隊(duì)列也是在 queue 里面的: 和 queue 一樣, priority_queue 也是一個(gè)容器適配器,那他和 queue 有什么區(qū)別呢?我們一

    2024年02月07日
    瀏覽(26)
  • 【C++初階10-stack&queue】STL中的棧和隊(duì)列(附優(yōu)先級(jí)隊(duì)列

    本期分享:STL中的棧和隊(duì)列。 在數(shù)據(jù)結(jié)構(gòu)初階時(shí),我們已經(jīng)學(xué)習(xí)這來(lái)那個(gè)兩種數(shù)據(jù)結(jié)構(gòu),如今來(lái)看STL中的,不過(guò)是更加標(biāo)準(zhǔn)化。而實(shí)現(xiàn)起來(lái),會(huì)簡(jiǎn)單得超乎你想象! 文中不足錯(cuò)漏之處望請(qǐng)斧正! STL中的棧和隊(duì)列是容器適配器。容器適配器是對(duì)某種已有容器的再次封裝。 比如

    2024年02月06日
    瀏覽(19)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包