生活随笔
收集整理的這篇文章主要介紹了
【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
目錄
五、queue的常見用法
六、priority_queue的常見用法
七、stack的常見用法
八、algorithm頭文件下的常用函數(shù)
五、queue的常見用法
queue也就是隊(duì)列,是STL中實(shí)現(xiàn)先進(jìn)先出的容器。queue是在當(dāng)需要實(shí)現(xiàn)BFS的時(shí)候,可以不用自己去手動(dòng)實(shí)現(xiàn)一個(gè)隊(duì)列,而是用queue作為代替,提高代碼的準(zhǔn)確性。另外要注意的一點(diǎn)是,在使用front()和back()函數(shù)之前,需要判斷queue是否為空。
queue的定義: /*
queue的定義在STL中比較常規(guī):添加頭文件#include <queue>并且在頭文件下邊加上using namespace std;然后就可以使用了。使用模式是queue<typename> name;
*/
queue<int> q;
?
queue的訪問: /*
STL中只能通過front()來訪問隊(duì)首元素,或者通過back()函數(shù)來訪問隊(duì)尾元素
*/
printf("%d %d\n",q.front(),q.back()); ?
push()函數(shù): /*
push(x)將x進(jìn)行入隊(duì)
*/
q.push(x); ?
front()和back(): /*
front()函數(shù)獲得隊(duì)首元素,back()函數(shù)獲得隊(duì)尾元素
*/printf("%d %d\n",q.front(),q.back()); ?
pop()函數(shù): /*
pop()函數(shù)用于讓隊(duì)首元素出隊(duì)
*/printf("%d\n",q.pop()); ?
empty()函數(shù): /*
empty()函數(shù)檢查隊(duì)列是否為空,返回bool類型,true是空,false是非空
*/if(!q.empty()){……;
} ?
六、priority_queue的常見用法
priority_queue又稱為優(yōu)先隊(duì)列,其底層是利用堆實(shí)現(xiàn)的。在priority_queue中,隊(duì)首元素一定是優(yōu)先級(jí)最高的元素,任何時(shí)間向priority_queue中push元素都會(huì)隨時(shí)調(diào)整結(jié)構(gòu),使得每次的隊(duì)首元素都是優(yōu)先級(jí)最大的。priority_queue可以解決一些貪心問題,也可以對(duì)Dijkstra算法進(jìn)行優(yōu)化。
priority_queue的定義: /*
priority_queue的定義在STL中比較常規(guī):添加頭文件#include <queue>并且在頭文件下邊加上using namespace std;然后就可以使用了。使用模式是priority_queue<typename> name;
*/
priority_queue<int> q;
priority_queue容器內(nèi)元素的訪問: /*priority_queue沒有front()函數(shù)和back()函數(shù),只能通過top()函數(shù)來訪問隊(duì)首元素,也就是優(yōu)先級(jí)最高的元素*/printf("%d",q.top()); ?
push()函數(shù): /*
push(x)將x進(jìn)行入隊(duì)
*/
q.push(x); top()函數(shù): /*top()函數(shù)獲得隊(duì)首元素*/printf("%d",q.top()); ?
pop()函數(shù): /*
pop()函數(shù)就是令隊(duì)首元素出隊(duì)的元素,就是優(yōu)先級(jí)最高的元素
*/q.pop(); ?
empty()函數(shù): /*empty()函數(shù)檢測(cè)priority_queue是否為空,空返回true,非空返回false;*/if(q.empty()==true)if(!q.empty()) ?
priority_queue內(nèi)元素優(yōu)先級(jí)的設(shè)置:
基本數(shù)據(jù)類型 的優(yōu)先級(jí)設(shè)置 /*
以下兩則等價(jià),less<int>表示數(shù)字大的優(yōu)先級(jí)大,而greater<int>表示數(shù)字小的優(yōu)先級(jí)大
*/
priority_queue<int> q;
priority_queue<int,vector<int>,less<int> > q;/*----------------------------------------------------------*/priority_queue<int,vector<int>,greater<int> > q; 結(jié)構(gòu)體優(yōu)先級(jí)設(shè)置
/*舉個(gè)栗子幫助理解*//*
價(jià)格大的優(yōu)先級(jí)大,與sort函數(shù)定義相反
*/
struct fruit{string name;int price;friend bool operator < (fruit f1,fruit f2){return f1.price < f2.price;//return f1.price > f2.price; 價(jià)格大的優(yōu)先級(jí)小}
}/*-------------------------------------------------------------*/
/*除了上面一種辦法,還有一種辦法表示*/struct fruit{string name;int price;
}
struct cmp{bool operator ()(fruit f1,fruit f2){return f1.price < f2.price;//return f1.price > f2.price; 價(jià)格大的優(yōu)先級(jí)小
}/*引用*/
priority_queue<fruit, vector<int>,cmp> q;/*即使是基本數(shù)據(jù)類型或者其他STL容器(如set),也可以通過同樣的方式來定義優(yōu)先級(jí)*/
friend bool operator < (const fruit &f1,const fruit &f2){return f1.price >f2.price;
}bool operator () (const fruit &f1,const fruit &f2){return f1.price > f2.price;
} ?
七、stack的常見用法
棧,后進(jìn)先出(FILO)
stack的定義: /*定義一個(gè)stack需要添加頭文件#include <stack>以及在頭文件下方加上using namespace std;stack<int> st;
*/stack<int> st; ?
stack容器內(nèi)的元素訪問: /*只能通過top()函數(shù)來訪問棧頂元素*/st.top(); push()函數(shù): /*push(x)將x入棧*/st.push(1); top()函數(shù): /*top()函數(shù)獲得棧頂元素*/st.top(); pop()函數(shù): /*使用pop()函數(shù)彈出棧頂元素*/st.pop(); empty()函數(shù): /*empty()可以檢測(cè)stack內(nèi)是否為空,true為空,false為非空*/if(st.enpty()==true) size()函數(shù): /*通過size()函數(shù)來獲得棧的元素個(gè)數(shù)*/st.size();
八、algorithm頭文件下的常用函數(shù)
max()/min()/abs(): max(x,y); //返回x,y中的最大值
min(x,y); //返回x,y中的最小值
abs(x); //返回x的絕對(duì)值
?
swap(): swap(x,y); //交換x和y的值 reverse(): //可以將數(shù)組指針在[it,it2)之間的元素或容器的迭代器在[it,it2)范圍內(nèi)進(jìn)行反轉(zhuǎn)
reverse(it,it2); /*數(shù)組反轉(zhuǎn)*/int a[10]={1,2,3,4,5,6,7,8,9,0};
reverse(a,a+4);/*容器反轉(zhuǎn)*/
string str="3843264872";
reverse(str.begin(),str.begin()+9);
next_permutation(): /*next_permutation()全排列*/
int a[3]={1,2,3};
do{printf("%d %d %d\n",a[0],a[1],a[2]);
}while(next_permutation(a,a+3));/*
123
132
213
231
312
321
*/
fill(): /*
fill()可以把數(shù)組或容器中的某一段區(qū)間賦值為某個(gè)值
*/
fill(a,a+4,233); sort(): /*sort(元素首地址(必填),尾地址的下一個(gè)地址(必填),比較函數(shù)(非必填))比較函數(shù)如果不填,則默認(rèn)為增序排列結(jié)構(gòu)體排序bool cmp(node a,node b){return a.x<b.x;
}*/
?
總結(jié)
以上是生活随笔為你收集整理的【2019暑假刷题笔记-STL绪论(二)】总结自《算法笔记》的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。