【C++初階學習】第十二彈——stack和queue的介紹和使用

C語言棧:數據結構——棧(C語言版)-CSDN博客

C語言隊列:數據結構——隊列(C語言版)-CSDN博客

前言:

在之前學習C語言的時候,我們已經學習過棧與隊列,并學習過如何使用C語言來實現棧與隊列,今天,我們用C++來學習這些知識,讓我們探索一下其中的新的知識點

目錄

一、stack(棧)

1. 棧的概述

?編輯

2. 棧的構造函數和成員函數

3. 棧的使用示例

4. 注意事項

二、queue(隊列)

1. 隊列的概述

?編輯

2. 隊列的構造函數和成員函數

3. 隊列的使用示例

4. 注意事項

三、思考題

四、總結


一、stack(棧)

C++中的stack是一種遵循后進先出原則的容器適配器。它提供了一系列標準的操作,使得用戶可以方便地實現棧這種數據結構。

1. 棧的概述

在C++標準庫中,stack并不直接暴露給用戶,而是作為<stack>頭文件中stack模板類的聲明。這個類是std::deque的封裝,因此默認情況下,棧是通過雙端隊列實現的。但是,用戶也可以指定其他的容器作為棧的底層結構,比如std::vectorstd::list

2. 棧的構造函數和成員函數

棧提供了以下構造函數成員函數,以便用戶可以輕松地創建和使用棧:

  • 空棧構造函數:創建一個空的棧。
  • 基于容器的構造函數:使用一個已存在的容器來初始化棧。
  • 拷貝構造函數:創建一個新棧,其內容是另一個棧的副本。

成員函數包括:

  • empty():檢查棧是否為空。
  • size():獲取棧中的元素數量。
  • top():返回棧頂元素的引用。
  • push(const T&):在棧頂插入一個元素。
  • pop():移除并返回棧頂元素。
  • emplace(const T&):在棧頂位置構造并插入一個元素。
  • swap(stack&):與另一個棧交換元素。

3. 棧的使用示例

以下是一個簡單的使用C++棧的示例代碼:

#include <iostream>
#include <stack>int main() {std::stack<int> numbers;// 壓入一些數字numbers.push(1);numbers.push(2);numbers.push(3);// 打印棧頂元素std::cout << "棧頂元素: " << numbers.top() << std::endl;// 彈出棧頂元素numbers.pop();// 檢查棧是否為空if (numbers.empty()) {std::cout << "棧為空" << std::endl;} else {std::cout << "棧不為空,棧中有 " << numbers.size() << " 個元素" << std::endl;}return 0;
}

運行結果:

4. 注意事項

雖然棧的使用看似簡單,但在實際應用中仍然需要注意以下幾點:

  • 確保不要超過棧的容量,否則可能會導致溢出。
  • 如果你需要頻繁地訪問棧中的元素,而不是僅僅進行 push 和 pop 操作,可能需要考慮使用其他數據結構。
  • 在模擬實現棧時,要注意內存管理,避免內存泄漏。

二、queue(隊列)

C++中的queue是一種遵循先進先出原則的容器適配器。它提供了一系列標準的操作,使得用戶可以方便地實現隊列這種數據結構。

1. 隊列的概述

在C++標準庫中,queue并不直接暴露給用戶,而是作為<queue>頭文件中queue模板類的聲明。這個類是std::deque的封裝,因此默認情況下,隊列是通過雙端隊列實現的。但是,用戶也可以指定其他的容器作為隊列的底層結構,比如std::list

2. 隊列的構造函數和成員函數

隊列提供了以下構造函數和成員函數,以便用戶可以輕松地創建和使用隊列:

  • 空隊列構造函數:創建一個空的隊列。
  • 基于容器的構造函數:使用一個已存在的容器來初始化隊列。
  • 拷貝構造函數:創建一個新隊列,其內容是另一個隊列的副本。

成員函數包括:

  • empty():檢查隊列是否為空。
  • size():獲取隊列中的元素數量。
  • front():返回隊列的第一個元素的引用。
  • back():返回隊列的最后一個元素的引用。
  • push(const T&):在隊列的尾部插入一個元素。
  • pop():移除并返回隊列的第一個元素。
  • emplace(const T&):在隊列的尾部位置構造并插入一個元素。
  • swap(queue&):與另一個隊列交換元素。

3. 隊列的使用示例

以下是一個簡單的使用C++隊列的示例代碼:

#include <iostream>
#include <queue>int main() {std::queue<int> numbers;// 插入一些數字numbers.push(1);numbers.push(2);numbers.push(3);// 打印隊列的第一個元素std::cout << "隊列的第一個元素: " << numbers.front() << std::endl;// 打印隊列的最后一個元素std::cout << "隊列的最后一個元素: " << numbers.back() << std::endl;// 彈出隊列的第一個元素numbers.pop();// 檢查隊列是否為空if (numbers.empty()) {std::cout << "隊列為空" << std::endl;} else {std::cout << "隊列不為空,隊列中有 " << numbers.size() << " 個元素" << std::endl;}return 0;
}

運行結果:

4. 注意事項

雖然隊列的使用看似簡單,但在實際應用中仍然需要注意以下幾點:

  • 確保不要超過隊列的容量,否則可能會導致溢出。
  • 如果你需要頻繁地訪問隊列中的元素,而不是僅僅進行 push 和 pop 操作,可能需要考慮使用其他數據結構。
  • 在模擬實現隊列時,要注意內存管理,避免內存泄漏。

三、思考題

1、我們學過如何用C語言來模擬實現棧與隊列,那我們如今學習了C++STL部分,請思考我們如何用C++來模擬實現棧與隊列

2、上面我們講到這兩個的底層容器都是dequeue,那什么是dequeue呢?

3、我們可不可以用其他容器,如vector、list來模擬實現棧與隊列?

(這些問題可以先思考一下,我們下篇再講)

四、總結

上面就是stack和queue的介紹和使用,由于之前有過C語言的學習,所以在使用上難度不大,難的主要體現在它的底層模擬構造上,這些我們將在下一篇進行講解

感謝各位大佬觀看,創作不易,還請各位大佬一鍵三連!!!

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

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

相關文章

Python | 平均績點

字符串的概念和特點 字符串既可以使用單引號&#xff0c;也可以使用雙引號""來創建 可以使用運算符來拼接字符串&#xff0c;并返回字符串拼接后的結果。 first_name "Tom" last_name "Jerry" full_name first_name " " &quo…

OCR圖片轉Excel表格:沒結構化的弊端

隨著OCR技術的不斷發展&#xff0c;將表格圖片轉為excel已不再是難題&#xff0c;但是&#xff0c;目前市面上的程序還大多處于僅能將圖片表格轉為普通的excel格式階段&#xff0c;而不能將其結構化&#xff0c;這樣就會產生許多的弊端&#xff0c;具體弊端如下&#xff1a; &l…

數據容器的通用操作、字符串大小比較 總結完畢!

1.數據容器的通用操作 1&#xff09;五類數據容器是否都支持while循環/for循環 五類數據容器都支持for循環遍歷 列表、元組、字符串都支持while循環&#xff0c;集合、字典不支持&#xff08;無法下標索引&#xff09; 盡管遍歷的形式不同&#xff0c;但都支持遍歷操作 2&a…

辦公軟件 Office 安裝教程(親測有效)

Office 現已更名為 Microsoft 365。習慣還是稱作 Office。 1、Office 套裝下載 Windows 的樣子 這里下載的是最新版本的 O365ProPlus 安裝完成后&#xff0c;點擊關閉&#xff08;請先不要打開&#xff09;。 Mac 的樣子 這里下載的是Office for Mac 2019&#xff08;更多版…

QNAP的jellyfin無法使用TMDB刮削的問題

解決方法很簡單&#xff0c;修改QNAP的HOSTS文件 使用DNS Checker工具查詢對應IP&#xff1a; image.tmdb.org api.themoviedb.org www.themoviedb.org 打開hosts文件&#xff0c;添加下列內容&#xff0c;wq保存 [~] # vi /etc/hosts 169.150.249.166 image.tmdb.org 103.2…

速遞FineWeb:一個擁有無限潛力的15T Tokens的開源數據集

大模型技術論文不斷&#xff0c;每個月總會新增上千篇。本專欄精選論文重點解讀&#xff0c;主題還是圍繞著行業實踐和工程量產。若在某個環節出現卡點&#xff0c;可以回到大模型必備腔調或者LLM背后的基礎模型新閱讀。而最新科技&#xff08;Mamba,xLSTM,KAN&#xff09;則提…

【TB作品】MSP430F149單片機,6通道ADC,串口發送

功能 用6個引腳采集ADC&#xff0c;串口發送到電腦 部分程序 /** Otherwise, the compiler removes it* because it is not used for anything.*/ int kaiguanliang[4]; /* 四個開關量 */unsigned char adok_ifg 1; …

內核宕機自救

【問題】在測試內核級防篡改時&#xff0c;偶爾會遇到內核宕機的問題 【結論】進入緊急救援模式&#xff0c;將服務進程文件的start注釋掉&#xff0c;即可 在Linux系統啟動時&#xff0c;內核啟動順序選擇界面&#xff0c;進入系統歡迎界面按上下左右鍵進入GRUB界面&#xff…

歐佩克+同意集體性減產延長,油價能否穩住?

KlipC報道&#xff1a;歐佩克組織同意將延長目前部分減產協議至2025年&#xff0c;以支撐油價。主要成員國把2023年11月宣布的日均220萬桶的自愿減產措施延長至今年9月底&#xff0c;將在10月份根據市場情況開始縮減自愿減產規模。 高盛分析師表示&#xff0c;“我們認為這次歐…

python常見數據分析函數

apply DataFrame.apply(func, axis0, broadcastFalse, rawFalse, reduceNone, args(), **kwds) 第一個參數是函數 可以在Series或DataFrame上執行一個函數 支持對行、列或單個值進行處理 import numpy as np import pandas as pdf lambda x: x.max()-x.min()df pd.DataFrame(…

高端、大氣、很牛B的免費wordpress模板主題

這是一款專為WordPress打造的極簡主義風格主題&#xff0c;以白色和黑色為主色調&#xff0c;搭配紅色點綴&#xff0c;營造出一種簡潔、專業且具有視覺沖擊力的效果。 該主題的設計理念是“簡單即美”&#xff0c;旨在幫助用戶快速搭建一個美觀、易用的網站。它提供了豐富的自…

動態sql set標簽 , trim標簽

set標簽 來看例子 set標案解決了逗號問題(當if條件不滿足時,逗號無處安放的問題),我認為set標簽可以識別這個問題,并自動忽略這個問題 <update id"update">update employee<set><if test"name!null">name#{name},</if><if te…

使用 Python 處理 Excel 表格數據的實用技巧

簡介 在日常工作中&#xff0c;處理 Excel 表格數據是一項常見的任務。Python 提供了豐富的庫和工具&#xff0c;能夠幫助我們高效地處理 Excel 數據。本篇博客將介紹如何使用 openpyxl 庫來讀取 Excel 表格并進行數據處理&#xff0c;同時展示一個實際案例&#xff0c;說明如…

3079. 求出加密整數的和

給你一個整數數組 nums &#xff0c;數組中的元素都是 正 整數。定義一個加密函數 encrypt &#xff0c;encrypt(x) 將一個整數 x 中 每一個 數位都用 x 中的 最大 數位替換。比方說 encrypt(523) 555 且 encrypt(213) 333 。 請你返回數組中所有元素加密后的 和 。 示例 1&…

HTML基本元素包含HTML表單驗證

可將以下代碼復制另存為一個HTML文件瀏覽器打開自己去看看實際使用效果 <!DOCTYPE html> <html> <head> <meta charset"utf-8"><title>測試</title> </head> <body> <h1>很多事</h1> <h1><b&…

多項分布模擬及 Seaborn 可視化教程

多項分布 簡介 多項分布是二項分布的推廣&#xff0c;它描述了在 n 次獨立試驗中&#xff0c;k 種不同事件分別出現次數的離散概率分布。與二項分布只能有兩種結果&#xff08;例如成功/失敗&#xff09;不同&#xff0c;多項分布可以有 k 種&#xff08;k ≥ 2&#xff09;及…

Nginx的Location匹配與Rewrite重寫

目錄 一.Nginx中location與rewrite 1.Nginx中常用正則表達式 2.location與rewrite的聯系和區別 二.location概述 1.分類 2.匹配規則 3.優先級 4.示例 三.rewrite概述 1.rewrite功能 2.rewrite執行順序 3.跳轉實現 4.語法格式 5.示例 5.1.基于域名的跳轉 5.2.基…

四、利用啟發式算法進行特定數據集的殘差網絡結構搜索【框架+源碼】

背景&#xff1a;工作之后干的事情跟算法關聯甚少&#xff0c;整理下讀書期間的負責和參與的work&#xff0c;再熟悉學習下。 邊熟悉邊整理嘍~ CV Tradictional workCV AI based work機械臂視覺抓取項目機器學習全流程 Pipeline訓練平臺OCR生產線噴碼識別三維重建(SfM)ROS機器人…

C++的vector使用優化

我們在上一章說了如何使用這個vector動態數組&#xff0c;這章我們說說如何更好的使用它以及它是如何工作的。當你創建一個vector&#xff0c;然后使用push_back添加元素&#xff0c;當當前的vector的內存不夠時&#xff0c;會從內存中的舊位置復制到內存中的新位置&#xff0c…

Spring 之 Lifecycle 及 SmartLifecycle

最近在看Eureka源碼&#xff0c;本想快速解決這場沒有硝煙的戰役&#xff0c;不曾想阻塞性問題一個接一個。為正確理解這個框架&#xff0c;我不得不耐著性子&#xff0c;慢慢梳理這些讓人困惑的點。譬如本章要梳理的Lifecycle和SmartLifecycle。它們均為接口&#xff0c;其中后…