STL之stack,queue,优先队列
1.stack,size(),empty(),pop()函數(shù)
#include<stack>
#include <iostream>
?
using namespace std;
?
//通過(guò)push()方法入棧
//通過(guò)size()方法求棧中元素的個(gè)數(shù)
//通過(guò)empty()方法判斷棧是否為空
//通過(guò)pop()求棧中最頂端的元素
void main()
{
??? int num;
??? cin >> num;
??? stack<int> mystack;
??? for (; num; num /= 2)
??? {
??????? mystack.push(num % 2);
??????? std::cout << "當(dāng)前元素個(gè)數(shù)" << mystack.size() << endl;
??? }
??? while (!mystack.empty())
??? {
??????? int num = mystack.top();
??????? std::cout << num << " ";
??????? mystack.pop();
??? }
?
??? cin.get();
??? cin.get();
}
運(yùn)行結(jié)果:
2.queue,隊(duì)列
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
?
void main()
{
??? queue<char *> myq;
??? myq.push("calc");
??? myq.push("notepad");
??? myq.push("tasklist");
??? myq.push("mspaint");
?
??? while (!myq.empty())
??? {
??????? char *p = myq.front();//獲取
??????? system(p);
??????? myq.pop();
??? }
?
??? cin.get();
??? //運(yùn)行結(jié)果是:
??? //彈出計(jì)算器
??? //彈出notepad
??? //顯示進(jìn)程
??? //彈出mspaint
}
案例2
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
?
void main()
{
??? deque<int> mydq;
??? mydq.push_back(1);
??? mydq.push_back(11);
??? mydq.push_back(111);
??? mydq.push_back(1111);
??? mydq.push_back(11111);
??? mydq.push_front(123);
??? mydq.insert(mydq.begin() + 3, 100);//插入
?
??? //類似數(shù)組的方式打印出結(jié)果
??? for (int i = 0; i < mydq.size(); i++)
??? {
??????? std::cout << mydq[i] << std::endl;
??? }
?
??? std::cout << "------------------" << std::endl;
?
??? //通過(guò)begin和end的方式實(shí)現(xiàn)打印出結(jié)果
??? auto ib = mydq.begin();
??? auto ie = mydq.end();
??? for (; ib != ie; ib++)
??? {
??????? std::cout << *ib << std::endl;
??? }
?
??? cin.get();
}
運(yùn)行結(jié)果:
案例3:
關(guān)于隊(duì)列的erase(),刪除某個(gè)元素
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
//刪除元素
void main()
{
??? deque<int> mydq;
??? mydq.push_back(1);
??? mydq.push_back(11);
??? mydq.push_back(111);
??? mydq.push_back(1111);
??? mydq.push_back(11111);
??? mydq.push_back(123);
??? //刪除頭部元素
??? mydq.erase(mydq.begin());
??? //刪除尾部元素
??? mydq.erase(mydq.end() - 1);
?
??? auto ib = mydq.begin();
??? auto ie = mydq.end();
??? for (; ib != ie;ib++)
??? {
??????? std::cout << *ib << std::endl;
??? }
?
??? cin.get();
}
運(yùn)行結(jié)果:
案例4
關(guān)于pop_front()和pop_back()
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
//刪除元素
void main()
{
??? deque<int> mydq;
??? mydq.push_back(1);
??? mydq.push_back(11);
??? mydq.push_back(111);
??? mydq.push_back(1111);
??? mydq.push_back(11111);
??? mydq.push_back(123);
??? //頭部彈出
??? mydq.pop_front();
??? //尾部彈出
??? mydq.pop_back();
?
??? auto ib = mydq.begin();
??? auto ie = mydq.end();
??? for (; ib != ie;ib++)
??? {
??????? std::cout << *ib << std::endl;
??? }
?
??? cin.get();
}
運(yùn)行結(jié)果:
案例5:
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
//刪除元素
void main()
{
??? deque<int> mydq;
??? mydq.push_back(1);
??? mydq.push_back(11);
??? mydq.push_back(111);
??? mydq.push_back(1111);
??? mydq.push_back(11111);
??? mydq.push_back(123);
??? //清空
??? mydq.clear();
?
??? auto ib = mydq.begin();
??? auto ie = mydq.end();
??? for (; ib != ie;ib++)
??? {
??????? std::cout << *ib << std::endl;
??? }
?
??? cin.get();
}
運(yùn)行結(jié)果:
案例6
swap實(shí)現(xiàn)兩個(gè)棧中的內(nèi)容交換
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
//swap()兩個(gè)棧中的數(shù)據(jù)交換
void main()
{
??? deque<int> mydq1;
??? mydq1.push_back(1);
??? mydq1.push_back(11);
??? mydq1.push_back(111);
??? mydq1.push_back(1111);
??? mydq1.push_back(11111);
?
??? deque<int> mydq2;
??? mydq2.push_back(2);
??? mydq2.push_back(21);
??? mydq2.push_back(211);
??? mydq2.push_back(2111);
??? mydq2.push_back(21111);
?
??? mydq1.swap(mydq2);
?
??? {
??????? auto ib = mydq1.begin();
??????? auto ie = mydq1.end();
??????? for (; ib != ie; ib++)
??????? {
??????????? std::cout << *ib << std::endl;
??????? }
??? }
?
??? std::cout << "---------------" << std::endl;
?
??? {
??????? auto ib = mydq2.begin();
??????? auto ie = mydq2.end();
??????? for (; ib != ie;ib++)
??????? {
??????????? std::cout << *ib << std::endl;
??????? }
??? }
?
??? cin.get();
}
案例7.
關(guān)于front(),back(),max_size(),size()
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊(duì)列
?
//提供了二維動(dòng)態(tài)數(shù)組的功能,頭部,尾部,任意操作
?
using namespace std;
//swap()兩個(gè)棧中的數(shù)據(jù)交換
void main()
{
??? deque<int> mydq1;
??? mydq1.push_back(1);
??? mydq1.push_back(11);
??? mydq1.push_back(111);
??? mydq1.push_back(1111);
??? mydq1.push_back(11111);
?
??? //第一個(gè)元素
??? std::cout << mydq1.front() << std::endl;
??? //最后一個(gè)元素值
??? std::cout << mydq1.back() << std::endl;
??? //棧所允許的最大個(gè)數(shù)
??? std::cout << mydq1.max_size() << std::endl;
??? //當(dāng)前棧的個(gè)數(shù)
??? std::cout << mydq1.size() << std::endl;
?
??? cin.get();
}
運(yùn)行結(jié)果:
3.優(yōu)先隊(duì)列
優(yōu)先隊(duì)列實(shí)現(xiàn)的參數(shù)的結(jié)果是有序的
#include <queue>
#include <iostream>
?
using namespace std;
//優(yōu)先隊(duì)列實(shí)現(xiàn)了自動(dòng)排序功能
void main()
{
??? priority_queue<int> myq;
??? myq.push(10);
??? myq.push(12);
??? myq.push(11);
??? myq.push(110);
??? myq.push(101);//自動(dòng)排序
?
??? while (!myq.empty())
??? {
??????? std::cout << myq.top() << endl;
??????? myq.pop();
??? }
?
??? cin.get();
}
運(yùn)行結(jié)果:
4.優(yōu)先隊(duì)列之2
案例:
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include<deque>//雙端隊(duì)列
using namespace std;
struct student
{
??? int age;
??? string name;
};
?
//這里按照年齡比較大小
struct stuless
{
??? bool operator()(const student &s1, const student &s2)
??? {
??????? return s1.age < s2.age;
??? }
};
?
void main()
{
??? ????????????//類名 存儲(chǔ)方式是deque方式 按照年齡排序
??? priority_queue<student, deque<student>, stuless> myq;
??? student s1;
??? s1.age = 10;
??? s1.name = "譚勝";
??? student s2;
??? s2.age = 9;
??? s2.name = "熊飛";
??? student s3;
??? s3.age = 19;
??? s3.name = "熊peng飛";
??? myq.push(s1);
??? myq.push(s2);
??? myq.push(s3);
??? while (!myq.empty())
??? {
??????? std::cout << myq.top().age << myq.top().name << endl;
??????? myq.pop();
??? }
??? cin.get();
}
運(yùn)行結(jié)果是:
?
與50位技術(shù)專家面對(duì)面20年技術(shù)見證,附贈(zèng)技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的STL之stack,queue,优先队列的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 拍拍贷查询代扣渠道为空什么意思
- 下一篇: STL之红黑树容器:set,hash_s