【C++】STL詳解(七)—stack和queue的介紹及使用

? 堅持用 清晰易懂的圖解 + 代碼語言, 讓每個知識點都 簡單直觀
🚀 個人主頁 :不呆頭 · CSDN
🌱 代碼倉庫 :不呆頭 · Gitee
📌 專欄系列

  • 📖 《C語言》
  • 🧩 《數據結構》
  • 💡 《C++》
  • 🐧 《Linux》

💬 座右銘“不患無位,患所以立。”

在這里插入圖片描述


【C++】STL詳解(七)—stack和queue的介紹及使用

  • 前言
  • 目錄
    • 一、stack
      • 1. stack的介紹
      • 2. stack的定義方式
        • 2.1 使用默認的適配器定義棧
        • 2.2 方式二:使用特定的適配器定義棧
      • 3.stack的使用
    • 二、queue
      • 1. queue的介紹
      • 2. queue的定義方式
        • 2.1 使用默認的適配器定義隊列
        • 2.2 使用特定的適配器定義隊列
      • 3.queue的使用
    • 三、總結


前言

🚀 歡迎來到《C++修煉之路》!

這里是C++程序員的成長樂園,帶你領略從面向對象到現代C++的精彩世界。我們將>用簡潔的代碼和生動的案例,助你掌握C++核心精髓。

🔍 專欄亮點:

  • 現代C++特性解析(C++11/14/17)
  • STL源碼剖析與實戰應用
  • 內存管理與性能優化技巧

💡 收獲預期:
?? 寫出更健壯的C++代碼
?? 深入理解面向對象設計
?? 掌握模板編程基礎

📌 編程箴言:

“好的C++代碼就像好酒,需要時間沉淀。”

(正文開始👇)


目錄

一、stack

1. stack的介紹

在這里插入圖片描述

C++98中stack 的構造函數 explicit stack(const container_type& ctnr = container_type()) 表示:stack 是一個容器適配器,內部需要一個底層容器(默認是 deque<T>)來存儲元素;如果不傳參數,就會默認構造一個空的底層容器來初始化空棧;如果傳入一個已有容器,就會以該容器的內容來初始化棧,且棧頂對應容器的最后一個元素。這里的 explicit 關鍵字用來禁止隱式轉換,也就是說不能直接用一個容器賦值給 stack,必須顯式構造。

專門用于具有后進先出的上下文環境中,其只能從元素的一端進行插入和提取操作。
在這里插入圖片描述


2. stack的定義方式

2.1 使用默認的適配器定義棧
stack<int> st1;

注意: 如果沒有為stack指定特定的底層容器,默認情況下使用deque。

2.2 方式二:使用特定的適配器定義棧
stack<int, vector<int>> st2;
stack<int, list<int>> st3;

3.stack的使用

stack 常用函數速查表

函數功能說明示例
push(const T& x)元素入棧(放到棧頂)s.push(10);
pop()刪除棧頂元素(不返回值)s.pop();
top()訪問棧頂元素(返回引用)int x = s.top();
empty()判斷棧是否為空,空返回 trueif(s.empty()) ...
size()返回棧中元素個數cout << s.size();
swap(stack& other)與另一棧交換內容s1.swap(s2);
  • stack 沒有提供遍歷迭代器,也沒有隨機訪問功能。
  • 想查看所有元素,只能不斷 pop() 出來。
#include<iostream>
#include<vector>
#include<stack>
using namespace std;int main()
{stack<int, vector<int>> st;stack<int, vector<int>> st1;st.push(5);st.push(2);st.push(0);st.push(2);st.push(0);cout << st.size() << endl;while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;st1.push(6);st1.push(6);st1.push(6);st.swap(st1);while (!st.empty()){cout << st.top() << " ";st.pop();}cout << endl;return 0;
}

測試結果:
在這里插入圖片描述


二、queue

1. queue的介紹

在這里插入圖片描述

queue 的構造函數 explicit queue(const container_type& ctnr = container_type()) 表示:queue 作為容器適配器,內部需要一個底層順序容器(默認是 deque<T>)來完成先進先出的隊列操作;如果不傳參數,就默認用一個空的底層容器初始化一個空隊列;如果傳入一個已有容器,就會用該容器的內容來初始化隊列,其中隊首對應底層容器的第一個元素,隊尾對應最后一個元素;而 explicit 關鍵字則用于禁止隱式轉換,只能顯式地通過容器構造 queue,不能直接賦值轉換。

專門用在具有先進先出操作的上下文環境中,其只能從容器的一端插入元素,另一端提取元素。
在這里插入圖片描述


2. queue的定義方式

2.1 使用默認的適配器定義隊列
queue<int> qu;

注意: 如果沒有為queue指定特定的底層容器,默認情況下使用deque。

2.2 使用特定的適配器定義隊列
queue<int,vector<int>> qu1;
queue<int,list<int>> qu2;

3.queue的使用

queue 常用函數速查表

函數功能說明示例
push(const T& x)元素入隊(放到隊尾)q.push(10);
pop()刪除隊首元素(不返回值)q.pop();
front()訪問隊首元素(返回引用)int x = q.front();
back()訪問隊尾元素(返回引用)int y = q.back();
empty()判斷隊列是否為空,空返回 trueif(q.empty()) ...
size()返回隊列中元素個數cout << q.size();
swap(queue& other)與另一隊列交換內容q1.swap(q2);
  • queue 沒有提供迭代器和隨機訪問功能。
  • 想遍歷所有元素,需要不斷 pop() 出隊。
#include<iostream>
#include<queue>
#include<list>
using namespace std;int main()
{queue<int, list<int>> qu;queue<int, list<int>> qu1;qu.push(5);qu.push(2);qu.push(0);qu.push(2);qu.push(0);cout << qu.size() << endl;while (!qu.empty()){cout << qu.front() << " ";qu.pop();}cout << endl;qu1.push(6);qu1.push(6);qu1.push(6);qu.swap(qu1);while (!qu.empty()){cout << qu.front() << " ";qu.pop();}cout << endl;return 0;
}

在這里插入圖片描述


三、總結

不是呆頭梳理了 stack 與 queue 的構造方式、常用函數以及典型用法:stack 主打 后進先出(LIFO),適合用在函數調用、表達式求值等場景;queue 主打 先進先出(FIFO),常用于任務調度、消息傳遞等場合。它們雖然功能簡單,但在實際開發中卻是高效而常用的工具。掌握好這兩個適配器容器,不僅能幫我們寫出更清晰的邏輯結構,也能為后續深入理解 STL 更復雜的容器與算法 打下堅實基礎。


不是呆頭將一直堅持用清晰易懂的圖解 + 代碼語言,讓每個知識點變得簡單!
👁? 【關注】 看一個非典型程序員如何用野路子解決正經問題
👍 【點贊】 給“不寫八股文”的技術分享一點鼓勵
🔖 【收藏】 把這些“奇怪但有用”的代碼技巧打包帶走
💬 【評論】 來聊聊——你遇到過最“呆頭”的 Bug 是啥?
🗳? 【投票】 您的投票是支持我前行的動力
技術沒有標準答案,讓我們一起用最有趣的方式,寫出最靠譜的代碼! 🎮💻

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/98066.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/98066.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/98066.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

深度學習周報(9.8~9.14)

目錄 摘要 Abstract 1 LSTM相關網絡總結與對比 1.1 理論總結 1.2 代碼運行對比 2 量子計算入門 3 總結 摘要 本周首先總結了LSTM、Bi-LSTM與GRU的區別與優缺點&#xff0c;對比了三者實戰的代碼與效果&#xff0c;還另外拓展了一些循環神經網絡變體&#xff08;包括窺視…

Quat 四元數庫使用教程:應用場景概述

基礎概念 四元數是一個包含四個元素的數組 [x, y, z, w]&#xff0c;其中 x,y,z表示虛部&#xff0c;w 表示實部。單位四元數常用于表示3D空間中的旋轉。 1. 創建和初始化函數 create() - 創建單位四元數 應用場景&#xff1a;初始化一個新的四元數對象&#xff0c;通常作為其他…

【Java后端】Spring Boot 多模塊項目實戰:從零搭建父工程與子模塊

如何用 Spring Boot 搭建一個父工程 (Parent Project)&#xff0c;并在其中包含多個子模塊 (Module)&#xff0c;適合企業級項目或者需要分模塊管理的場景。Spring Boot 多模塊項目實戰&#xff1a;從零搭建父工程與子模塊在日常開發中&#xff0c;我們經常會遇到這樣的需求&am…

企業級AI會議系統技術實現:快鷺如何用AI重構會議全流程

摘要 本文深度解析快鷺AI會議系統的核心技術架構&#xff0c;重點探討其在語音識別、自然語言處理、數據集成和安全防護等方面的技術實現。通過對比傳統會議系統的技術痛點&#xff0c;分析快鷺AI如何通過技術創新實現會議籌備時間減少67%、數據調取速度提升100倍的顯著效果。…

【CSS學習筆記3】css特性

1css三大特性 1.1層疊性&#xff1a;就近原則&#xff0c;最新定義的樣式 1.2繼承性&#xff1a;子標簽集成父標簽的樣式&#xff0c;如文本和字號 行高的繼承&#xff1a;不加單位指的是當前文字大小的倍數 body {font: 12px/1.5 Microsoft YaHei;color: #be1313;} div {…

[C語言]常見排序算法①

1.排序的概念及常見的排序算法排序在咱們日常生活中十分的常見&#xff0c;就好比是網上購物的時候通常能夠選擇按照什么排序&#xff0c;比如價格、評論數量、銷量等。那么接下來咱們就來了解一些關于排序的概念。排序&#xff1a;所謂排序&#xff0c;就是使一串記錄&#xf…

文獻閱讀筆記:RS電子戰測試與測量技術文檔

信息來源&#xff1a;羅德與施瓦茨&#xff08;Rohde & Schwarz&#xff09;公司關于電子戰&#xff08;Electronic Warfare, EW&#xff09;測試與測量解決方案專業技術文檔。 該文檔由臺灣地區應用工程師Mike Wu撰寫&#xff0c;核心圍繞電子戰基礎、雷達系統、實戰應用及…

別再糾結 Postman 和 Apifox 了!這款開源神器讓 API 測試更簡單

別再糾結 Postman 和 Apifox 了&#xff01;這款開源神器讓 API 測試更簡單&#x1f525; 作為一名開發者&#xff0c;你是否還在為選擇 API 測試工具而糾結&#xff1f;Postman 太重、Apifox 要聯網、付費功能限制多&#xff1f;今天給大家推薦一款完全免費的開源替代方案 ——…

微調神器LLaMA-Factory官方保姆級教程來了,從環境搭建到模型訓練評估全覆蓋

1. 項目背景 開源大模型如LLaMA&#xff0c;Qwen&#xff0c;Baichuan等主要都是使用通用數據進行訓練而來&#xff0c;其對于不同下游的使用場景和垂直領域的效果有待進一步提升&#xff0c;衍生出了微調訓練相關的需求&#xff0c;包含預訓練&#xff08;pt&#xff09;&…

創建其他服務器賬號

? 在 /home74 下創建新用戶的完整步驟1. 創建用戶并指定 home 目錄和 shellsudo useradd -m -d /home74/USERNAME -s /bin/bash USERNAME-m&#xff1a;自動創建目錄并復制 /etc/skel 默認配置文件&#xff08;.bashrc 等&#xff09;。-d&#xff1a;指定用戶 home 路徑&…

【WebGIS】Vue3使用 VueLeaflet + 天地圖 搭建地圖可視化平臺(基礎用法)

初始化 創建項目 nodejs 18.0.6npm 9.5.1 引入地圖服務 VueLeaflet GitHub - vue-leaflet/vue-leaflet&#xff1a; vue-leaflet 與 vue3 兼容 Vue Leaflet (vue2-leaflet) package.josn安裝版本 直接添加四個依賴 {// ..."scripts": {// ...},"depen…

OpenCV 開發 -- 圖像閾值處理

文章目錄[toc]1 基本概念2 簡單閾值處理cv2.threshold3 自適應閾值處理cv2.adaptiveThreshold更多精彩內容&#x1f449;內容導航 &#x1f448;&#x1f449;OpenCV開發 &#x1f448;1 基本概念 圖像閾值處理&#xff08;Thresholding&#xff09;是圖像處理中的一種基本技術…

單串口服務器-工業級串口聯網解決方案

在工業自動化、智能電網、環境監測等領域&#xff0c;傳統串口設備&#xff08;如PLC、傳感器、儀表等&#xff09;的網絡化升級需求日益增長。博為智能單串口服務器憑借高性能硬件架構、多協議支持和工業級可靠性&#xff0c;為RS485設備提供穩定、高效的TCP/IP網絡接入能力&a…

第 9 篇:深入淺出學 Java 語言(JDK8 版)—— 吃透泛型機制,筑牢 Java 類型安全防線

簡介&#xff1a;聚焦 Java 泛型這一“類型安全保障”核心技術&#xff0c;從泛型解決的核心痛點&#xff08;非泛型代碼的運行時類型錯誤、強制類型轉換冗余&#xff09;切入&#xff0c;詳解泛型的本質&#xff08;參數化類型&#xff09;、核心用法&#xff08;泛型類/接口/…

MySQL和Redis的數據一致性問題與業界常見解法

一、為什么會出現數據不一致&#xff1f; 根本原因在于&#xff1a;這是一個涉及兩個獨立存儲系統的數據更新操作&#xff0c;它無法被包裝成一個原子操作&#xff08;分布式事務&#xff09;。更新數據庫和更新緩存是兩個獨立的步驟&#xff0c;無論在代碼中如何排列這兩個步驟…

coolshell文章閱讀摘抄

coolshell文章閱讀摘抄打好基礎學好英語限制你的不是其它人&#xff0c;也不是環境&#xff0c;而是自己Java打好基礎 程序語言&#xff1a;語言的原理&#xff0c;類庫的實現&#xff0c;編程技術&#xff08;并發、異步等&#xff09;&#xff0c;編程范式&#xff0c;設計模…

數據庫造神計劃第六天---增刪改查(CRUD)(2)

&#x1f525;個人主頁&#xff1a;尋星探路 &#x1f3ac;作者簡介&#xff1a;Java研發方向學習者 &#x1f4d6;個人專欄&#xff1a;《從青銅到王者&#xff0c;就差這講數據結構&#xff01;&#xff01;&#xff01;》、 《JAVA&#xff08;SE&#xff09;----如此簡單&a…

使用Rust實現服務配置/注冊中心

Conreg 使用 Rust 實現的配置與注冊中心&#xff0c;參考了 Nacos 的設計&#xff0c;簡單易用&#xff0c;使用 Raft 保證集群節點數據一致性。 支持的平臺&#xff1a; UbuntuCentOS其他常見的 Linux 發行版&#xff08;我們使用 musl 編譯&#xff0c;理論上支持所有主流…

三色標記算法

在 JVM 并發垃圾收集&#xff08;GC&#xff09;中&#xff0c;三色標記算法是實現 “GC 線程與用戶線程并行執行” 的關鍵技術&#xff0c;它解決了并發場景下 “如何準確標記存活對象” 的核心問題&#xff0c;是 CMS、G1 等現代收集器的底層基礎。一、三色標記的核心&#x…

OpenStack 管理與基礎操作學習筆記(一):角色、用戶及項目管理實踐

OpenStack實驗 OpenStack命令 admin-openrc.sh 進入管理員視圖查看當前 OpenStack 中的項目列表&#xff0c;驗證是否已經登錄成功切換用戶 修改文件切換用戶上傳文件切換用戶OpenStack 認證管理 實驗介紹 通過 OpenStack Dashboard 和 OpenStack CLI 兩種方式創建角色、用戶、…