日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

STL之stack,queue,优先队列

發布時間:2024/9/27 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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;

?

??? //通過beginend的方式實現打印出結果

??? 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,优先队列的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。