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

【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL)

這篇具有很好參考價(jià)值的文章主要介紹了【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL)。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言

前言

文章綁定了VS平臺(tái)下std::stack和std::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ì)象’ ,以及學(xué)習(xí)了幾個(gè)STL的結(jié)構(gòu)也相信大家都掌握的不錯(cuò),接下來(lái)博主將會(huì)帶領(lǐng)大家繼續(xù)學(xué)習(xí)有關(guān)C++比較重要的知識(shí)點(diǎn)—— stack & queue(STL)。下面話不多說(shuō)坐穩(wěn)扶好咱們要開(kāi)車了??

stack

1. stack概念

stack 的文檔介紹

在C++中std::stack是一個(gè)模板類,它是基于容器的適配器,用于實(shí)現(xiàn)堆棧數(shù)據(jù)結(jié)構(gòu)。堆棧是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),類似于現(xiàn)實(shí)生活中的一疊盤子。std::stack類位于<stack>頭文件中,并且是C++標(biāo)準(zhǔn)庫(kù)的一部分。它提供了一組成員函數(shù)和操作符,用于對(duì)堆棧進(jìn)行操作。
【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言

2. stack特點(diǎn)

  1. 后進(jìn)先出(LIFO):std::stack是一種后進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),這意味著最后壓入堆棧的元素將首先被彈出。

  2. 基于容器的適配器:std::stack是基于容器的適配器,它使用底層容器來(lái)存儲(chǔ)元素。默認(rèn)情況下,std::deque被用作底層容器,但你也可以選擇其他容器,如std::vectorstd::list。

  3. 快速插入和刪除:由于std::stack是基于容器的適配器,它使用底層容器的插入和刪除操作來(lái)實(shí)現(xiàn)元素的壓入和彈出。這些操作的時(shí)間復(fù)雜度通常是常數(shù)時(shí)間,因此插入和刪除操作非常高效。

  4. 無(wú)索引訪問(wèn):std::stack不支持通過(guò)索引訪問(wèn)元素。你只能訪問(wèn)堆棧頂部的元素,即使用top()函數(shù)。如果你需要訪問(wèn)其他位置的元素,你需要先將頂部的元素彈出。

  5. 無(wú)迭代器支持:std::stack不支持迭代器,因此你不能使用迭代器遍歷堆棧中的元素。如果你需要遍歷堆棧中的元素,你需要先將它們彈出。

  6. 大小可變:std::stack的大小是可變的,你可以根據(jù)需要?jiǎng)討B(tài)地壓入和彈出元素。

3. stack使用

  1. 包含頭文件:首先,你需要包含<stack>頭文件,以便使用std::stack類。
#include <stack>
  1. 創(chuàng)建堆棧對(duì)象:使用std::stack類創(chuàng)建一個(gè)堆棧對(duì)象。你需要指定堆棧中元素的類型。例如,如果你想創(chuàng)建一個(gè)存儲(chǔ)整數(shù)的堆棧,你可以這樣做:
std::stack<int> myStack;
  1. 壓入元素:使用push(element)函數(shù)將元素壓入堆棧的頂部。你可以連續(xù)調(diào)用push()函數(shù)來(lái)壓入多個(gè)元素。
myStack.push(10);
myStack.push(20);
myStack.push(30);
  1. 彈出元素:使用pop()函數(shù)從堆棧的頂部移除元素。你可以使用循環(huán)或條件語(yǔ)句來(lái)連續(xù)彈出元素。
myStack.pop();
  1. 訪問(wèn)頂部元素:使用top()函數(shù)可以訪問(wèn)堆棧頂部的元素,但不會(huì)將其從堆棧中移除。
int topElement = myStack.top();
  1. 檢查堆棧是否為空:使用empty()函數(shù)可以檢查堆棧是否為空。如果堆棧為空,返回true;否則返回false
if (myStack.empty()) {
    // 堆棧為空
} else {
    // 堆棧不為空
}
  1. 獲取堆棧的大?。菏褂?code>size()函數(shù)可以獲取堆棧中元素的數(shù)量。
int stackSize = myStack.size();

這些是使用std::stack的一般步驟。可以根據(jù)需要進(jìn)行堆棧的操作,如壓入元素、彈出元素、訪問(wèn)頂部元素等。

queue

1. queue概念

queue的文檔介紹

在C++中,queue(隊(duì)列)是一種數(shù)據(jù)結(jié)構(gòu),它遵循先進(jìn)先出(FIFO)的原則。它類似于現(xiàn)實(shí)生活中的排隊(duì),新元素被添加到隊(duì)列的末尾,而從隊(duì)列中移除元素時(shí),總是從隊(duì)列的前端開(kāi)始。
【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言

2. queue特點(diǎn)

  1. 先進(jìn)先出(FIFO):std::queue是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),這意味著最先添加到隊(duì)列的元素將首先被移除。

  2. 基于容器的適配器:std::queue是基于容器的適配器,它使用底層容器來(lái)存儲(chǔ)元素。

  3. 快速插入和刪除:由于std::queue是基于容器的適配器,它使用底層容器的插入和刪除操作來(lái)實(shí)現(xiàn)元素的添加和移除。這些操作的時(shí)間復(fù)雜度通常是常數(shù)時(shí)間,因此插入和刪除操作非常高效。

  4. 無(wú)索引訪問(wèn):std::queue不支持通過(guò)索引訪問(wèn)元素。你只能訪問(wèn)隊(duì)列的前端和末尾元素,即使用front()back()函數(shù)。

  5. 無(wú)迭代器支持:std::queue不支持迭代器。如果你需要遍歷隊(duì)列中的元素,你需要先將它們移除。

  6. 大小可變:std::queue的大小是可變的,你可以根據(jù)需要?jiǎng)討B(tài)地添加和移除元素。

3. queue使用

  1. 包含頭文件:首先,你需要包含<queue>頭文件,以便使用std::queue類。
#include <queue>
  1. 創(chuàng)建隊(duì)列對(duì)象:使用std::queue類創(chuàng)建一個(gè)隊(duì)列對(duì)象。你需要指定隊(duì)列中元素的類型。例如,如果你想創(chuàng)建一個(gè)存儲(chǔ)整數(shù)的隊(duì)列,你可以這樣做:
std::queue<int> myQueue;
  1. 添加元素:使用push(element)函數(shù)將元素添加到隊(duì)列的末尾。你可以連續(xù)調(diào)用push()函數(shù)來(lái)添加多個(gè)元素。
myQueue.push(10);
myQueue.push(20);
myQueue.push(30);
  1. 移除元素:使用pop()函數(shù)從隊(duì)列的前端移除元素。你可以使用循環(huán)或條件語(yǔ)句來(lái)連續(xù)移除元素。
myQueue.pop();
  1. 訪問(wèn)前端和末尾元素:使用front()函數(shù)可以訪問(wèn)隊(duì)列的前端元素,使用back()函數(shù)可以訪問(wèn)隊(duì)列的末尾元素,但不會(huì)將它們從隊(duì)列中移除。
int frontElement = myQueue.front();
int backElement = myQueue.back();
  1. 檢查隊(duì)列是否為空:使用empty()函數(shù)可以檢查隊(duì)列是否為空。如果隊(duì)列為空,返回true;否則返回false
if (myQueue.empty()) {
    // 隊(duì)列為空
} else {
    // 隊(duì)列不為空
}
  1. 獲取隊(duì)列的大?。菏褂?code>size()函數(shù)可以獲取隊(duì)列中元素的數(shù)量。
int queueSize = myQueue.size();

這些是使用std::queue的一般步驟??梢愿鶕?jù)需要進(jìn)行隊(duì)列的操作,如添加元素、移除元素、訪問(wèn)前端和末尾元素等。

容器適配器

1. 什么是適配器

適配器是一種設(shè)計(jì)模式,它允許將一個(gè)類的接口轉(zhuǎn)換為另一個(gè)類的接口,以便兩個(gè)類可以協(xié)同工作。適配器模式通常用于解決兩個(gè)不兼容的接口之間的問(wèn)題。

在C++中,適配器也可以指代標(biāo)準(zhǔn)庫(kù)中的容器適配器。容器適配器是一種特殊類型的容器,它使用底層容器來(lái)提供不同的接口和功能。適配器通過(guò)封裝底層容器的操作,提供了一組新的操作和語(yǔ)義。

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標(biāo)準(zhǔn)庫(kù)中std::stackstd::queue。它們分別基于底層容器(默認(rèn)為std::deque)提供了堆棧和隊(duì)列的功能。
【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言
【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言

3. STL標(biāo)準(zhǔn)庫(kù)中對(duì)于stack和queue的模擬實(shí)現(xiàn)

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

template<class T, class Container = deque<T>>
class stack
{
public:
	//入棧
	void push(const T& x)
	{
		_con.push_back(x);
	}
	//出棧
	void pop()
	{
		_con.pop_back();
	}
	//返回棧頂數(shù)據(jù)
	T& top()
	{
		return _con.back();
	}
	//返回const類型棧頂數(shù)據(jù)
	const T& top() const
	{
		return _con.back();
	}
	//判斷是否為空
	bool empty()
	{
		return _con.empty();
	}
	//返回棧的大小
	size_t size() const
	{
		return _con.size();
	}
private:
	Container _con;
};

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

template<class T, class Container = deque<T>>
class queue
{
public:
	//進(jìn)入隊(duì)列
	void push(const T& x)
	{
		_con.push_back(x);
	}		//出隊(duì)列
	void pop()
	{
		_con.pop_front();
	}
	//返回隊(duì)尾數(shù)據(jù)
	T& back()
	{
		return _con.back();
	}
	//返回隊(duì)頭數(shù)據(jù)
	T& front()
	{
		return _con.front;
	}
	//返回const類型隊(duì)尾數(shù)據(jù)
	const T& back() const
	{
		return _con.back();
	}
	//返回const類型隊(duì)頭數(shù)據(jù)
	const T& front() const
	{
		return _con.front;
	}
	//判斷是否為空
	bool empty() const
	{
		return _con.empty();
	}
	//返回隊(duì)列大小
	size_t size() const
	{
		return _con.size();
	}
private:
	Container _con;
};

總結(jié)

stack是一種后進(jìn)先出(LIFO)的數(shù)據(jù)結(jié)構(gòu),它是一種容器適配器。它的特點(diǎn)是最后添加的元素將首先被移除。stack使用底層容器來(lái)存儲(chǔ)元素,默認(rèn)情況下使用std::deque作為底層容器。。queue是一種先進(jìn)先出(FIFO)的數(shù)據(jù)結(jié)構(gòu),也是一種容器適配器。它使用底層容器來(lái)存儲(chǔ)元素,默認(rèn)情況下使用std::deque作為底層容器。適配器是一種設(shè)計(jì)模式,它允許將一個(gè)類的接口轉(zhuǎn)換為另一個(gè)類的接口,以便兩個(gè)類可以協(xié)同工作。在STL標(biāo)準(zhǔn)庫(kù)中,stack和queue是基于其他容器實(shí)現(xiàn)的容器適配器。它們使用底層容器來(lái)存儲(chǔ)元素,并提供了堆棧和隊(duì)列的功能。

溫馨提示

感謝您對(duì)博主文章的關(guān)注與支持!在閱讀本篇文章的同時(shí),我們想提醒您留下您寶貴的意見(jiàn)和反饋。如果您喜歡這篇文章,可以點(diǎn)贊、評(píng)論和分享給您的同學(xué),這將對(duì)我提供巨大的鼓勵(lì)和支持。另外,我計(jì)劃在未來(lái)的更新中持續(xù)探討與本文相關(guān)的內(nèi)容。我會(huì)為您帶來(lái)更多關(guān)于C++以及編程技術(shù)問(wèn)題的深入解析、應(yīng)用案例和趣味玩法等。請(qǐng)繼續(xù)關(guān)注博主的更新,不要錯(cuò)過(guò)任何精彩內(nèi)容!

再次感謝您的支持和關(guān)注。我們期待與您建立更緊密的互動(dòng),共同探索C++、算法和編程的奧秘。祝您生活愉快,排便順暢!
【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL),C++,c++,開(kāi)發(fā)語(yǔ)言文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-664363.html

到了這里,關(guān)于【C++入門到精通】C++入門 —— 容器適配器、stack和queue(STL)的文章就介紹完了。如果您還想了解更多內(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++初階:容器適配器介紹、stack和queue常用接口詳解及模擬實(shí)現(xiàn)

    C++初階:容器適配器介紹、stack和queue常用接口詳解及模擬實(shí)現(xiàn)

    介紹完了list類的相關(guān)內(nèi)容后:C++初階:適合新手的手撕list(模擬實(shí)現(xiàn)list) 接下來(lái)進(jìn)入新的篇章,stack和queue的介紹以及模擬: stack是一種容器適配器,專門用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行元素的插入與提取操作。 stack是作為容器適配器

    2024年02月19日
    瀏覽(25)
  • 【C++】STL中的容器適配器 stack queue 和 priority_queue 的模擬實(shí)現(xiàn)

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

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

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

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

    2024年02月02日
    瀏覽(25)
  • 【C++從入門到放棄】stack和queue的深度剖析及空間適配器的介紹

    【C++從入門到放棄】stack和queue的深度剖析及空間適配器的介紹

    ?????作者: @情話0.0 ??專欄:《C++從入門到放棄》 ??個(gè)人簡(jiǎn)介:一名雙非編程菜鳥(niǎo),在這里分享自己的編程學(xué)習(xí)筆記,歡迎大家的指正與點(diǎn)贊,謝謝! ??此篇博客將談及到的stack、queue和priority_queue都不是STL的標(biāo)準(zhǔn)容器,而是一種空間適配器。它是通過(guò)對(duì)一種容器進(jìn)行

    2024年02月11日
    瀏覽(19)
  • STL: 容器適配器stack 與 queue

    STL: 容器適配器stack 與 queue

    ? 目錄 1.容器適配器 1.1 STL標(biāo)準(zhǔn)庫(kù)中stack和queue的底層結(jié)構(gòu) 1.2 deque的簡(jiǎn)單介紹(了解) 1.2.1 deque的原理介紹 1.2.2 deque的缺陷 1.2.3 為什么選擇deque作為stack和queue的底層默認(rèn)容器 2. stack的介紹和使用 2.1 stack的介紹 ?2.2 stack的使用 2.3 利用deque模擬實(shí)現(xiàn)stack 3.queue的介紹和使用 3.1 queue的

    2024年02月05日
    瀏覽(24)
  • 【STL】容器適配器stack和queue常見(jiàn)用法及模擬實(shí)現(xiàn)

    【STL】容器適配器stack和queue常見(jiàn)用法及模擬實(shí)現(xiàn)

    1.stack介紹及使用 1.1 stack的介紹 stack文檔介紹 stack是一種容器適配器,專門用在具有后進(jìn)先出操作的上下文環(huán)境中,其刪除只能從容器的一端進(jìn)行元素的插入與提取操作。 stack是作為容器適配器被實(shí)現(xiàn)的,容器適配器是使用特定容器類的封裝對(duì)象作為其基礎(chǔ)容器的類,提供一

    2024年02月06日
    瀏覽(24)
  • 【C++干貨鋪】適配器 | stack | queue

    【C++干貨鋪】適配器 | stack | queue

    ========================================================================= 個(gè)人主頁(yè)點(diǎn)擊直達(dá): 小白不是程序媛 C++系列學(xué)習(xí)專欄: C++干貨鋪 代碼倉(cāng)庫(kù): Gitee ========================================================================= 目錄 stack的介紹和使用 stack的介紹 stack的使用 queue的介紹和使用 queue的介紹 qu

    2024年02月05日
    瀏覽(48)
  • 【C++】容器適配器之priority_queue & 仿函數(shù)

    【C++】容器適配器之priority_queue & 仿函數(shù)

    我們和學(xué)習(xí)之前的容器一樣,可以使用cplusplus官網(wǎng)進(jìn)行學(xué)習(xí):priority_queue文檔介紹 priority_queue(優(yōu)先級(jí)隊(duì)列)是一種容器適配器,它 和queue使用同一個(gè)頭文件,其底層結(jié)構(gòu)是一個(gè)堆,并且默認(rèn)情況下是一個(gè)大根堆,此外,priority_queue也不支持迭代器,這是為了不破壞堆的結(jié)構(gòu)使用

    2024年02月01日
    瀏覽(19)
  • 適配器模式實(shí)現(xiàn)stack和queue

    適配器模式實(shí)現(xiàn)stack和queue

    適配器是一種設(shè)計(jì)模式(設(shè)計(jì)模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過(guò)分類編目的、代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié)),該種模式是將一個(gè)類的接口轉(zhuǎn)換成客戶希望的另外一個(gè)接口。 雖然stack和queue中也可以存放元素,但在STL中并沒(méi)有將其劃分在容器的行列,而是將其稱為容器適配器

    2024年02月11日
    瀏覽(21)
  • STL stack,queue,deque以及適配器

    STL stack,queue,deque以及適配器

    下面是stack庫(kù)中的接口函數(shù),有了前面的基礎(chǔ),我們可以根據(jù)函數(shù)名得知函數(shù)的作用 函數(shù) 說(shuō)明 stack() 構(gòu)造空棧 empty() 判斷棧是否為空 size() 返回棧中元素個(gè)數(shù) top 返回棧頂元素 push() 將值從棧頂壓入棧內(nèi) pop() 在棧頂出棧 棧其實(shí)就是一種特殊的 vector ,因此可以使用 vector 模擬實(shí)

    2024年02月10日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包