1. 再談隊(duì)列
回顧一下之前所學(xué)的隊(duì)列,隊(duì)列和棧不同,隊(duì)列是一種先進(jìn)先出的數(shù)據(jù)結(jié)構(gòu),STL的隊(duì)列內(nèi)容極其重要,雖然內(nèi)容較少但是請(qǐng)務(wù)必掌握,STL的隊(duì)列是快速構(gòu)建搜索算法以及相關(guān)的數(shù)論圖論的狀態(tài)存儲(chǔ)的基礎(chǔ)。
2.相關(guān)頭文件
頭文件:#include<queue>
3.初始化
格式為:
explicit queue (const container_type& ctnr = container_type());
我們以int類型作為參數(shù)為例進(jìn)行創(chuàng)建。
queue<int> q; //創(chuàng)建一個(gè)空的沒(méi)有數(shù)據(jù)的隊(duì)列q queue<int> qoo(q); //創(chuàng)建一個(gè)隊(duì)列其元素為q的全部?jī)?nèi)容
標(biāo)準(zhǔn)的隊(duì)列創(chuàng)建方法是直接創(chuàng)建空隊(duì)列再進(jìn)行其他的操作,由于隊(duì)列的特殊性質(zhì),擁有其他容器的參數(shù)可以這樣創(chuàng)建,這種多參數(shù)的方式可能有一些復(fù)雜,一般也很少這樣使用。
vector<int> v(3,100); queue<int,vector<int> > s(v); //注意,> >符號(hào)之間需要有一個(gè)空格隔開(kāi)
通過(guò)標(biāo)準(zhǔn)的方式創(chuàng)建向量數(shù)組,然后通過(guò)復(fù)制構(gòu)造函數(shù)的方式進(jìn)行創(chuàng)建,其內(nèi)容就是vector數(shù)組的全部?jī)?nèi)容。
4. 迭代器
棧和隊(duì)列都屬于一種特殊的數(shù)據(jù)結(jié)構(gòu),只能通過(guò)訪問(wèn)頂層數(shù)據(jù)并不斷剔除數(shù)據(jù)的方法進(jìn)行全部訪問(wèn),因此沒(méi)有直接的迭代器。
5. 常用接口
我們預(yù)先通過(guò)queue<int> q創(chuàng)建了一個(gè)隊(duì)列,命名為q,方便舉例。
a)大小size()
返回隊(duì)列元素的個(gè)數(shù)
函數(shù)原型:size_type size() const;
cout<<q.size()<<endl; //直接返回隊(duì)列元素的個(gè)數(shù)
b) 入隊(duì)push()
進(jìn)行入隊(duì)操作,在隊(duì)尾處進(jìn)行插入
函數(shù)原型:void push (const value_type& val);
q.push(100);
c) 出隊(duì)pop()
進(jìn)行出隊(duì)操作,在對(duì)頭出進(jìn)行彈出
函數(shù)原型:void pop();
q.pop();
d)訪問(wèn)隊(duì)頭元素front()
訪問(wèn)對(duì)頭元素,可以返回其數(shù)值,也可以進(jìn)行相應(yīng)的操作,這里更加建議多使用front()訪問(wèn)隊(duì)頭數(shù)據(jù),因?yàn)槲覀冞M(jìn)行出隊(duì)操作均是從隊(duì)頭進(jìn)行出隊(duì)的。
函數(shù)原型:
value_type& front();
const value_type& front() const;
q.front()+=500; //對(duì)隊(duì)頭元素進(jìn)行修改 cout<<q.front()<<endl; //直接輸出內(nèi)容
e) 訪問(wèn)隊(duì)尾元素back()
訪問(wèn)隊(duì)尾元素,較為少用。
函數(shù)原型:
value_type& back();
const value_type& back() const;
q.back()+=500; //對(duì)隊(duì)尾元素進(jìn)行修改 cout<<q.back()<<endl;
f) 判空empty()
返回一個(gè)bool類型的值,只存在真和假,當(dāng)隊(duì)列為空時(shí)為真,不為空時(shí)為假
函數(shù)原型
bool empty() const;
可以利用empty()進(jìn)行隊(duì)列的遍歷操作,這里建議先使用初始化函數(shù)將隊(duì)列進(jìn)行復(fù)制,否則遍歷之后隊(duì)列就為空了。
while(q.empty()){ cout<<q.front()<<endl; q.pop(); }
6. 相關(guān)配套習(xí)題
我們可以回顧隊(duì)列的相關(guān)題目再度進(jìn)行聯(lián)系,熟悉STL 的簡(jiǎn)化方法,為搜索算法的學(xué)習(xí)做預(yù)備。
[第四章—隊(duì)列的內(nèi)容]
試著使用STL完成隊(duì)列基本操作
作業(yè):1898題
1898 | 藍(lán)橋杯算法提高VIP-合并石子 |
C語(yǔ)言網(wǎng)提供由在職研發(fā)工程師或ACM藍(lán)橋杯競(jìng)賽優(yōu)秀選手錄制的視頻教程,并配有習(xí)題和答疑,點(diǎn)擊了解:
一點(diǎn)編程也不會(huì)寫(xiě)的:零基礎(chǔ)C語(yǔ)言學(xué)練課程
解決困擾你多年的C語(yǔ)言疑難雜癥特性的C語(yǔ)言進(jìn)階課程
從零到寫(xiě)出一個(gè)爬蟲(chóng)的Python編程課程
只會(huì)語(yǔ)法寫(xiě)不出代碼?手把手帶你寫(xiě)100個(gè)編程真題的編程百練課程
信息學(xué)奧賽或C++選手的 必學(xué)C++課程
藍(lán)橋杯ACM、信息學(xué)奧賽的必學(xué)課程:算法競(jìng)賽課入門課程
手把手講解近五年真題的藍(lán)橋杯輔導(dǎo)課程