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

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map

發(fā)布時(shí)間:2024/10/8 c/c++ 55 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

@Author:Runsen

STL 中的棧容器是一種容器適配器。在棧容器中,元素在一端插入并在同一端刪除。

stack

為了實(shí)現(xiàn)堆棧容器,我們需要在我們的程序中包含頭文件<stack>。

#include<stack>

stack容器的一般聲明語法是:

stack<objectType> stackNam

下面介紹下STL 中stack容器支持的各種操作。

  • push 操作用于在堆棧中插入一個(gè)元素。此操作始終在堆棧頂部添加元素。
  • pop 操作用于從堆棧中刪除元素。移除的元素是棧頂指向的元素。
  • top : 返回棧頂元素。
  • empty : 檢查堆棧是否為空。
  • size:返回棧的大小,即棧中元素的數(shù)量。
#include <iostream> #include <stack> using namespace std; int main() {stack<int> stack;stack.push(21);stack.push(22);stack.push(24);stack.push(25);stack.pop();stack.pop();while (!stack.empty()) {cout << ' ' << stack.top();stack.pop();} }

queue

元素添加到隊(duì)列的后面,而從隊(duì)列的前面刪除。一般來說,隊(duì)列采用先進(jìn)先出(FIFO)的排列方式。

要在程序中實(shí)現(xiàn)隊(duì)列容器,我們必須在代碼中包含一個(gè)頭文件 <queue>。

隊(duì)列支持的各種操作。

  • empty() – 返回隊(duì)列是否為空。
  • size() – 返回隊(duì)列的大小。
  • swap():交換兩個(gè)隊(duì)列的內(nèi)容,但隊(duì)列的類型必須相同,盡管大小可能不同。
  • emplace():在隊(duì)列容器中插入一個(gè)新元素,新元素被添加到隊(duì)列的末尾。
  • queue::front() 和 queue::back() – front()函數(shù)返回對(duì)隊(duì)列第一個(gè)元素的引用。back()函數(shù)返回對(duì)隊(duì)列最后一個(gè)元素的引用。
  • push(g) 和 pop() – push()函數(shù)在隊(duì)列末尾添加元素“g”。pop()函數(shù)刪除隊(duì)列的第一個(gè)元素。
#include <iostream> #include <queue>using namespace std;// Print the queue void showq(queue<int> gq) {queue<int> g = gq;while (!g.empty()) {cout << '\t' << g.front();g.pop();}cout << '\n'; }// Driver Code int main() {queue<int> gquiz;gquiz.push(10);gquiz.push(20);gquiz.push(30);cout << "The queue gquiz is : ";showq(gquiz);cout << "\ngquiz.size() : " << gquiz.size();cout << "\ngquiz.front() : " << gquiz.front();cout << "\ngquiz.back() : " << gquiz.back();cout << "\ngquiz.pop() : ";gquiz.pop();showq(gquiz);return 0; }

map

map是具有鍵值對(duì)的關(guān)聯(lián)容器,因此鍵值始終是唯一的。map中的鍵可以插入或刪除,但不能更改。另一方面,可以更改與鍵關(guān)聯(lián)的值。

  • at 和 [ ]:運(yùn)算符 at和 [ ] 用于訪問map元素。at 和 [] 具有相同的功能,但只有一個(gè)區(qū)別。如果映射中不存在訪問的鍵,則“at ”運(yùn)算符會(huì)引發(fā)異常。而 [ ] 運(yùn)算符會(huì)在映射中不存在訪問的鍵時(shí)在map中插入新鍵。
  • begin : 返回map中第一個(gè)元素的迭代器。
  • end:返回指向map中最后一個(gè)元素之后的元素的迭代器。
#include <iostream> #include <map> using namespace std; int main() {map<int, int> mymap{ {1,10},{2,20},{3,30} };map<int, int> ::iterator it;cout << "\nThe map mymap is : \n";cout << "\tKEY\tVALUE\n";for (it = mymap.begin(); it != mymap.end(); ++it) {cout << '\t' << it->first<< '\t' << it->second << '\n';}cout << endl;mymap.at(2) = 10; mymap[3] = 10; cout << "\nThe map mymap is : \n";cout << "\tKEY\tVALUE\n";for (it = mymap.begin(); it != mymap.end(); ++it) {cout << '\t' << it->first<< '\t' << it->second << '\n';}cout << endl; }

輸出如下

The map mymap is :KEY VALUE1 102 203 30The map mymap is :KEY VALUE1 102 103 10

unordered_map

unordered_map 是一個(gè)關(guān)聯(lián)容器,用于存儲(chǔ)由鍵值和映射值組合形成的元素。map的API 對(duì)于unordered_map 的操作基本相同。

#include <iostream> #include <unordered_map> using namespace std;int main() {unordered_map<string, int> umap;umap["1"] = 10;umap["2"] = 20;umap["3"] = 30;for (auto x : umap)cout << x.first << " " << x.second << endl;}

map和unordered_map的對(duì)比:

map 操作的平均時(shí)間復(fù)雜度為 O(log n) 而對(duì)于 unordered_map,平均時(shí)間復(fù)雜度為 O(1)。

對(duì)于查找問題,unordered_map會(huì)更加高效一些,因此遇到查找問題,常會(huì)考慮一下用unordered_map,但是空間占用上unorder_map要高于map,因?yàn)閡norder_map占用的內(nèi)存更加高一點(diǎn),unorder_map內(nèi)部采用hash表,map內(nèi)部采用的是紅黑樹,內(nèi)存占有率的問題轉(zhuǎn)化成hash表 VS 紅黑樹,還是unorder_map內(nèi)存要高一點(diǎn)

總結(jié)

以上是生活随笔為你收集整理的【小白学习C++ 教程】二十二、C++ 中的STL容器stack、queue和map的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。