STL之stack,queue,优先队列
1.stack,size(),empty(),pop()函數
#include<stack>
#include <iostream>
?
using namespace std;
?
//通過push()方法入棧
//通過size()方法求棧中元素的個數
//通過empty()方法判斷棧是否為空
//通過pop()求棧中最頂端的元素
void main()
{
??? int num;
??? cin >> num;
??? stack<int> mystack;
??? for (; num; num /= 2)
??? {
??????? mystack.push(num % 2);
??????? std::cout << "當前元素個數" << mystack.size() << endl;
??? }
??? while (!mystack.empty())
??? {
??????? int num = mystack.top();
??????? std::cout << num << " ";
??????? mystack.pop();
??? }
?
??? cin.get();
??? cin.get();
}
運行結果:
2.queue,隊列
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
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();
??? //運行結果是:
??? //彈出計算器
??? //彈出notepad
??? //顯示進程
??? //彈出mspaint
}
案例2
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
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);//插入
?
??? //類似數組的方式打印出結果
??? for (int i = 0; i < mydq.size(); i++)
??? {
??????? std::cout << mydq[i] << std::endl;
??? }
?
??? std::cout << "------------------" << std::endl;
?
??? //通過begin和end的方式實現打印出結果
??? auto ib = mydq.begin();
??? auto ie = mydq.end();
??? for (; ib != ie; ib++)
??? {
??????? std::cout << *ib << std::endl;
??? }
?
??? cin.get();
}
運行結果:
案例3:
關于隊列的erase(),刪除某個元素
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
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();
}
運行結果:
案例4
關于pop_front()和pop_back()
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
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();
}
運行結果:
案例5:
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
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();
}
運行結果:
案例6
swap實現兩個棧中的內容交換
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
using namespace std;
//swap()兩個棧中的數據交換
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.
關于front(),back(),max_size(),size()
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include <deque> //雙端隊列
?
//提供了二維動態數組的功能,頭部,尾部,任意操作
?
using namespace std;
//swap()兩個棧中的數據交換
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);
?
??? //第一個元素
??? std::cout << mydq1.front() << std::endl;
??? //最后一個元素值
??? std::cout << mydq1.back() << std::endl;
??? //棧所允許的最大個數
??? std::cout << mydq1.max_size() << std::endl;
??? //當前棧的個數
??? std::cout << mydq1.size() << std::endl;
?
??? cin.get();
}
運行結果:
3.優先隊列
優先隊列實現的參數的結果是有序的
#include <queue>
#include <iostream>
?
using namespace std;
//優先隊列實現了自動排序功能
void main()
{
??? priority_queue<int> myq;
??? myq.push(10);
??? myq.push(12);
??? myq.push(11);
??? myq.push(110);
??? myq.push(101);//自動排序
?
??? while (!myq.empty())
??? {
??????? std::cout << myq.top() << endl;
??????? myq.pop();
??? }
?
??? cin.get();
}
運行結果:
4.優先隊列之2
案例:
#include <queue>
#include <iostream>
#include <string>
#include <stdlib.h>
#include <list>
?
#include<deque>//雙端隊列
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()
{
??? ????????????//類名 存儲方式是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();
}
運行結果是:
?
與50位技術專家面對面20年技術見證,附贈技術全景圖總結
以上是生活随笔為你收集整理的STL之stack,queue,优先队列的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 拍拍贷查询代扣渠道为空什么意思
- 下一篇: 未来在眼前——12月18日铃轩2期隆重开