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

c++中的stack和dequeue解析

 更新時(shí)間:2023年05月04日 15:48:41   作者:葉超凡  
這篇文章主要介紹了c++中的stack和dequeue介紹,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下

stack介紹

首先stack是一個(gè)類這個(gè)類是專門(mén)用來(lái)存數(shù)據(jù),并且這個(gè)類是一個(gè)模板類,所以我們可以使用這個(gè)stack來(lái)存儲(chǔ)各種各樣的數(shù)據(jù),但是這個(gè)類在存儲(chǔ)數(shù)據(jù)的時(shí)候得遵循LIFO規(guī)則也就是后進(jìn)先出原則:后進(jìn)入stack的數(shù)據(jù)會(huì)先出stack,我們把最后進(jìn)入stack對(duì)象的數(shù)據(jù)稱為棧頂元素,把最先進(jìn)入stack對(duì)象的數(shù)據(jù)稱為棧底元素,下面是這個(gè)類的英文介紹:

stack的定義

我們來(lái)看看stack的構(gòu)造函數(shù):

庫(kù)中的stack函數(shù)只提供了一種形式,并且這種形式的參數(shù)只有一個(gè)還提供了缺省值,那么我們?cè)谑褂眠@個(gè)類的時(shí)候就不要管這個(gè)參數(shù)直接使用缺省值即可,比如下面的代碼:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	return 0;
}

這樣我們就創(chuàng)建了一個(gè)空類。

stack的數(shù)據(jù)插入

在stack中插入數(shù)據(jù)只能用到push函數(shù):

這個(gè)函數(shù)有一個(gè)參數(shù),并且該參數(shù)是value_type類型,那么這個(gè)類型的意思是:模板中第一個(gè)參數(shù)的類型

也就是stack在顯示初始化的時(shí)候我們給的那個(gè)類型,那么該函數(shù)的使用代碼如下:

#include<iostream>
#include<stack>
using namespace std;
int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	return 0;
}

我們可以通過(guò)調(diào)試看到這里的s1中確實(shí)有數(shù)據(jù)1 2 3 4 :

stack中數(shù)據(jù)的個(gè)數(shù)

這個(gè)函數(shù)就是顯示stack對(duì)象中含有數(shù)據(jù)的個(gè)數(shù)

比如下面的代碼:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "對(duì)象中還有的個(gè)數(shù)為:" << _size << endl;
	return 0;
}

這段代碼的運(yùn)行結(jié)果為:

stack數(shù)據(jù)刪除

在stack當(dāng)中不存在頭刪尾刪和任意位置的刪除,只有一個(gè)pop函數(shù)來(lái)刪除數(shù)據(jù)最后進(jìn)入stack對(duì)象的數(shù)據(jù),也就是棧頂元素:

比如說(shuō)下面的代碼:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "對(duì)象中還有的個(gè)數(shù)為:" << _size << endl;
	s1.pop();
	return 0;
}

我們通過(guò)調(diào)試可以看到在pop函數(shù)執(zhí)行之前對(duì)象s1中的內(nèi)容為:

當(dāng)我們執(zhí)行完這里的pop函數(shù)之后,由于元素4是最后一個(gè)進(jìn)入stack對(duì)象的,所以它是棧頂元素,那么在執(zhí)行完pop函數(shù)之后該元素就會(huì)被刪除,我們來(lái)看看調(diào)試的結(jié)果:

那么這就是pop函數(shù)的作用。

stack中數(shù)據(jù)的查看

在stack當(dāng)中沒(méi)有迭代器,范圍for和操作符[ ]重載這些功能,因?yàn)閟tack遵守后進(jìn)先出的LIFO規(guī)則,所以我們這里只能通過(guò)top函數(shù)來(lái)查看stack對(duì)象中的棧頂元素的內(nèi)容,

當(dāng)我們想看棧頂?shù)暮笠粋€(gè)元素的時(shí)候,就只能將棧頂?shù)脑貏h除再調(diào)用top函數(shù)來(lái)進(jìn)行查看,比如說(shuō)下面的代碼:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	size_t _size = s1.size();
	cout << "對(duì)象中還有的個(gè)數(shù)為:" << _size << endl;
	cout << "對(duì)象中棧頂?shù)脑貫椋? << s1.top() << endl;
	s1.pop();
	_size = s1.size();
	cout << "對(duì)象中還有的個(gè)數(shù)為:" << _size << endl;
	cout << "現(xiàn)在棧頂?shù)脑貫椋? << s1.top() << endl;
	return 0;
}

這段代碼的運(yùn)行結(jié)果如下:

并且我們還可以通過(guò)top函數(shù)來(lái)修改棧頂元素的內(nèi)容,比如說(shuō)下面的代碼:

int main()
{
	stack<int>s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	cout << "修改前棧頂?shù)脑貫椋? << s1.top() << endl;
	s1.top() = 10;
	cout << "修改后棧頂?shù)脑貫椋? << s1.top() << endl;
}

這段代碼的運(yùn)行結(jié)果如下:

判斷stack對(duì)象是否為空

當(dāng)我們想看看stack對(duì)象是否為空的時(shí)候就可以用到empty函數(shù),這個(gè)函數(shù)的功能就是檢查對(duì)象的數(shù)據(jù)是否為空,如果為空的話這個(gè)函數(shù)就會(huì)返回true,如果不為空的話這個(gè)函數(shù)就會(huì)返回flase,該函數(shù)的介紹如下:

這里就不用演示了。

stack對(duì)象的數(shù)據(jù)交換

stack也提供了,swap函數(shù)其作用就是將兩個(gè)stack對(duì)象的數(shù)據(jù)進(jìn)行交換,該函數(shù)的介紹如下:

我們可以看看下面的代碼:

int main()
{
	stack<int> s1;
	s1.push(1);
	s1.push(2);
	s1.push(3);
	s1.push(4);
	stack<int> s2;
	s2.push(5);
	s2.push(6);
	s2.push(7);
	s2.push(8);
	s1.swap(s2);
	return 0;
}

在執(zhí)行swap函數(shù)之前兩個(gè)對(duì)象的內(nèi)容如下:

執(zhí)行完swap函數(shù)之后兩個(gè)對(duì)象的內(nèi)容為:

那么以上就是stack庫(kù)中的所有基本內(nèi)容。

queue的介紹

隊(duì)列是一種容器適配器,專門(mén)用于在FIFO上下文(先進(jìn)先出)中操作,其中從容器一端插入元素,另一端提取元素。隊(duì)列作為容器適配器實(shí)現(xiàn),容器適配器即將特定容器類封裝作為其底層容器類,queue提供一組特定的成員函數(shù)來(lái)訪問(wèn)其元素。元素從隊(duì)尾入隊(duì)列,從隊(duì)頭出隊(duì)列。底層容器可以是標(biāo)準(zhǔn)容器類模板之一,也可以是其他專門(mén)設(shè)計(jì)的容器類。標(biāo)準(zhǔn)容器類deque和list滿足了這些要求。默認(rèn)情況下,如果沒(méi)有為queue實(shí)例化指定容器類,則使用標(biāo)準(zhǔn)容器deque。

queue的定義

這個(gè)對(duì)象的構(gòu)造函數(shù)也只有一個(gè)參數(shù),并且這個(gè)參數(shù)也是提供了缺省參數(shù),我們使用的時(shí)候可以不用管,我們使用的時(shí)候直接創(chuàng)建一個(gè)空隊(duì)列就行:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	return 0;
}

queue的數(shù)據(jù)插入

通過(guò)這個(gè)函數(shù),我們可以往指定隊(duì)列對(duì)象中插入數(shù)據(jù),那么這里的參數(shù)類型得和隊(duì)列的數(shù)據(jù)相同,我們可以看卡下面的代碼:

#include<iostream>
#include<queue>
using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	return 0;
}

我們創(chuàng)建隊(duì)列的時(shí)候顯示初始化為int類型,那么我們使用push函數(shù)的時(shí)候也得傳遞int類型的數(shù)據(jù),那么我們這里就可以通過(guò)調(diào)試來(lái)看到這個(gè)對(duì)象的中內(nèi)容:

front

這個(gè)函數(shù)的作用就是返回隊(duì)列頭部的值,并且我們可以通過(guò)這個(gè)函數(shù)來(lái)修改隊(duì)列頭部的值,比如說(shuō)下面的代碼:

using namespace std;
int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout <<"front 指向的元素為:" << q1.front() << endl;
	q1.front() = 10;
	cout << "front 指向的元素為:" << q1.front() << endl;
	return 0;
}

這段代碼的運(yùn)行結(jié)果如下:

back

這個(gè)函數(shù)的作用與front函數(shù)相反,這個(gè)函數(shù)就是返回隊(duì)列尾部的值并且同樣可以對(duì)其進(jìn)行修改,比如說(shuō)下面的代碼:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "back 指向的元素為:" << q1.back() << endl;
	q1.back() = 10;
	cout << "back 指向的元素為:" << q1.back() << endl;
	return 0;
}

queue的元素個(gè)數(shù)

size函數(shù)的作用就是返回隊(duì)列中元素的個(gè)數(shù),比如說(shuō)下面的代碼:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素個(gè)數(shù)為:" << q1.size() << endl;
	q1.push(5);
	cout << "q1的元素個(gè)數(shù)為:" << q1.size() << endl;
	return 0;
}

這段代碼的運(yùn)行結(jié)果如下:

queue中元素的刪除

在隊(duì)列中刪除元素得用到pop函數(shù),這個(gè)函數(shù)可以將隊(duì)列中隊(duì)頭的數(shù)據(jù)進(jìn)行刪除,比如說(shuō)下面的代碼:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	cout << "q1的元素個(gè)數(shù)為:" << q1.size() << endl;
	q1.pop();
	cout << "q1的元素個(gè)數(shù)為:" << q1.size() << endl;
	return 0;
}

這段代碼的運(yùn)行結(jié)果如下:

empty

當(dāng)我們想看看queue對(duì)象是否為空的時(shí)候就可以用到empty函數(shù),這個(gè)函數(shù)的功能就是檢查對(duì)象的內(nèi)容是否為空,如果為空的話這個(gè)函數(shù)就會(huì)返回true,如果不為空的話這個(gè)函數(shù)就會(huì)返回flase。

queue的數(shù)據(jù)交換

如果我們想將兩個(gè)queue對(duì)象的數(shù)據(jù)進(jìn)行交換的話,我們這里就可以使用swap函數(shù),這里為了防止使用者用錯(cuò)了方法,庫(kù)中還提供了另外一種使用的形式:

我們來(lái)看看下面的代碼:

int main()
{
	queue<int> q1;
	q1.push(1);
	q1.push(2);
	q1.push(3);
	q1.push(4);
	queue<int> q2;
	q2.push(5);
	q2.push(6);
	q2.push(7);
	q2.push(8);
	q1.swap(q2);
	swap(q1, q2);
	return 0;
}

我們可以通過(guò)調(diào)試來(lái)看到在swap函數(shù)執(zhí)行之前兩個(gè)對(duì)象的內(nèi)容為:

執(zhí)行了第一個(gè)swap函數(shù)之后,兩個(gè)對(duì)象的內(nèi)容進(jìn)行了交換:

當(dāng)我們?cè)賵?zhí)行另一種swap函數(shù)之后對(duì)象的數(shù)據(jù)如下:

那么這就是swap函數(shù)的作用。

到此這篇關(guān)于c++中的stack和dequeue介紹的文章就介紹到這了,更多相關(guān)c++ stack和dequeue內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例

    C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例

    這篇文章主要介紹了C++實(shí)現(xiàn)查找二叉樹(shù)中和為某一值的所有路徑的示例,文中的方法是根據(jù)數(shù)組生成二叉排序樹(shù)并進(jìn)行遍歷,需要的朋友可以參考下
    2016-02-02
  • C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表)

    C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表)

    這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(23.合并k個(gè)有序鏈表),本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下
    2021-07-07
  • C++多態(tài)實(shí)現(xiàn)方式詳情

    C++多態(tài)實(shí)現(xiàn)方式詳情

    這篇文章主要介紹了C++多態(tài)實(shí)現(xiàn)方式詳情,多態(tài)是一種面向?qū)ο蟮脑O(shè)計(jì)思路,本身和C++不是強(qiáng)綁定的,其他語(yǔ)言當(dāng)中一樣有多態(tài),只不過(guò)實(shí)現(xiàn)的方式可能有所不同。下面來(lái)一起了解更多詳細(xì)內(nèi)容吧
    2022-01-01
  • CLion搭建配置C++開(kāi)發(fā)環(huán)境的圖文教程 (MinGW-W64 GCC-8.1.0)

    CLion搭建配置C++開(kāi)發(fā)環(huán)境的圖文教程 (MinGW-W64 GCC-8.1.0)

    這篇文章主要介紹了CLion搭建配置C++開(kāi)發(fā)環(huán)境的教程 (MinGW-W64 GCC-8.1.0),本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2021-02-02
  • 關(guān)于C++友元類的實(shí)現(xiàn)講解

    關(guān)于C++友元類的實(shí)現(xiàn)講解

    今天小編就為大家分享一篇關(guān)于關(guān)于C++友元類的實(shí)現(xiàn)講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧
    2018-12-12
  • C語(yǔ)言與JAVA的區(qū)別是什么(推薦)

    C語(yǔ)言與JAVA的區(qū)別是什么(推薦)

    本文是小編給大家收集整理的關(guān)于C語(yǔ)言與Java的區(qū)別介紹,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧
    2017-04-04
  • C++實(shí)現(xiàn)高校教室管理系統(tǒng)

    C++實(shí)現(xiàn)高校教室管理系統(tǒng)

    這篇文章主要為大家詳細(xì)介紹了C++實(shí)現(xiàn)高校教室管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2022-03-03
  • Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    Qt數(shù)據(jù)庫(kù)應(yīng)用之實(shí)現(xiàn)數(shù)據(jù)的導(dǎo)入與導(dǎo)出

    QT中涉及到數(shù)據(jù)庫(kù)相關(guān)的項(xiàng)目,幾乎都需要將少量的信息數(shù)據(jù)導(dǎo)出到文件保存好,然后用戶可以打開(kāi)該表格進(jìn)行編輯,編輯完成后保存,再重新導(dǎo)入到軟件中。所以本文將具體為大家介紹一下這一功能如何實(shí)現(xiàn),感興趣的可以跟隨小編一起試一試
    2022-01-01
  • C語(yǔ)言庫(kù)函數(shù)qsort的使用詳解

    C語(yǔ)言庫(kù)函數(shù)qsort的使用詳解

    C語(yǔ)言庫(kù)函數(shù)中的qsort的是一個(gè)回調(diào)函數(shù),回調(diào)函數(shù)就是一個(gè)通過(guò)函數(shù)指針調(diào)用的函數(shù),這篇文章主要介紹了C語(yǔ)言庫(kù)函數(shù)qsort的使用,需要的朋友可以參考下
    2022-06-06
  • C++中std::distance使用方法示例

    C++中std::distance使用方法示例

    std::distance?是 C++ 標(biāo)準(zhǔn)庫(kù)中的一個(gè)函數(shù),用于計(jì)算兩個(gè)迭代器之間的距離,本文主要介紹了C++中std::distance使用方法示例,具有一定的參考價(jià)值,感興趣的可以了解一下
    2025-04-04

最新評(píng)論