C++基礎:模擬實現queue和stack。底層:適配器

引言

模擬實現queue和stack,理解適配器,實現起來非常簡單。

一、適配器?

????????適配器是一種能讓原本不兼容的接口協同工作的設計模式或者組件。它的主要作用是對一個類的接口進行轉換,使其符合另一個類的期望接口,進而實現適配和復用。(看下面代碼來理解)

可以理解為是一個更高層次的封裝。(解耦性更高)

比如:stack可以封裝list來實現,queue也可以封裝一個list來實現,但是list對內存的空間利用率不高。用vector封裝實現的話,頭插和頭刪的效率很低。

所以底層實現了一個雙端隊列deque用來解決上面的問題。

deque(雙端隊列):是一種雙開口的"連續"空間的數據結構,雙開口的含義是:可以在頭尾兩端 進行插入和刪除操作,且時間復雜度為O(1),與vector比較,頭插效率高,不需要搬移元素;與 list比較,空間利用率比較高。

deque的底層這里就不多描述了。

二、模擬實現queue

queue是先進后出的數據結構,即只能在尾部插入,頭部刪除。

#include <deque>namespace stl
{template<class T, class Container = deque<T>> //用deque做適配器class queue{public:void push(const T& x) //尾插{_con.push_back(x);}void pop() //頭刪{_con.pop_front();}size_t size() const  //元素個數{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& front() const //返回隊頭{return _con.front();}T& front() //返回隊頭{return _con.front();}const T& back() const  //返回隊尾{return _con.back();}T& back()  //返回隊尾{return _con.back();}private:Container _con; //適配器適配數據結構};
}

三、模擬實現stack

stack是先進先出的數據結構。

#pragma once
#include <deque>
using namespace std;namespace stl
{template<class T, class Container = deque<T>>class stack{public:void push(const T& x) //入棧{_con.push_back(x);}void pop()  //出棧{_con.pop_back();}void size() const  //元素個數{return _con.size();}bool empty() const  //判空{return _con.empty();}const T& top() const  //返回棧頂{return _con.back();}T& top() //返回棧頂{return _con.back();}private:Container _con;};
}

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

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

相關文章

OI 雜題

OI 雜題字符串括號匹配例 1&#xff1a;與之前的類似&#xff0c;就是講一點技巧&#xff0c;但是比較亂&#xff0c;湊合著看吧。 字符串 括號匹配 幾何意義&#xff1a;考慮令 ( 為 111 變換&#xff0c;令 ) 為 ?1-1?1 變換&#xff0c;然后對這個 1/?11/-11/?1 構成…

【論文閱讀】Safety Alignment Should Be Made More Than Just a Few Tokens Deep

Safety Alignment Should Be Made More Than Just a Few Tokens Deep原文摘要問題提出現狀與漏洞&#xff1a;當前LLMs的安全對齊機制容易被攻破&#xff0c;即使是簡單的攻擊&#xff08;如對抗性后綴攻擊&#xff09;或良性的微調也可能導致模型越獄。核心論點&#xff1a; 作…

Generative AI in Game Development

如有侵權或其他問題&#xff0c;歡迎留言聯系更正或刪除。 出處&#xff1a;CHI 20241. 一段話總結本研究通過對來自 Reddit 和 Facebook 群組的 3,091 條獨立游戲開發者的在線帖子和評論進行定性分析&#xff0c;探討了他們對生成式 AI在游戲開發中多方面作用的認知與設想。研…

【C++算法】72.隊列+寬搜_二叉樹的最大寬度

文章目錄題目鏈接&#xff1a;題目描述&#xff1a;解法C 算法代碼&#xff1a;題目鏈接&#xff1a; 662. 二叉樹最大寬度 題目描述&#xff1a; 解法 這里的寬度指的是一層的最右邊的非空節點到一層的最左邊的非空節點&#xff0c;一共的節點數。 解法一&#xff1a;硬來&am…

什么是3DVR?VR技術有哪些應用場景?

VR與3D技術解析及應用在高科技領域&#xff0c;VR和3D是兩個常被提及的名詞。那么&#xff0c;這兩者之間究竟存在著怎樣的區別與聯系呢&#xff1f;簡而來說&#xff0c;VR技術是3D技術的一種高級延展和深化應用。3D技術&#xff0c;即將二維設計圖轉化為立體、逼真的視覺效果…

棧與隊列:數據結構核心解密

棧和隊列的基本 棧(Stack)是一種后進先出(LIFO, Last In First Out)的數據結構。元素的插入和刪除操作只能在棧頂進行。常見的操作包括壓棧(push)和彈棧(pop)。 隊列(Queue)是一種先進先出(FIFO, First In First Out)的數據結構。元素的插入在隊尾進行,刪除在隊…

《C++初階之STL》【list容器:詳解 + 實現】

【list容器&#xff1a;詳解 實現】目錄前言------------標準接口介紹------------標準模板庫中的list容器是什么樣的呢&#xff1f;1. 常見的構造2. 迭代器操作std::list::beginstd::list::endstd::list::rbeginstd::list::rend3. 容量的操作std::list::sizestd::list::empty…

【灰度實驗】——圖像預處理(OpenCV)

目錄 1 灰度圖 2 最大值法 3 平均值法 4 加權均值法 5 兩個極端的灰度值 將彩色圖轉為灰度圖地過程稱為灰度化。 灰度圖是單通道圖像&#xff0c;灰度化本質就是將彩色圖的三通道合并成一個通道的過程。三種合并方法&#xff1a;最大值法&#xff0c;平均值法和加權均值法…

【linux驅動開發】編譯linux驅動程序報錯:ERROR: Kernel configuration is invalid.

提示&#xff1a;文章寫完后&#xff0c;目錄可以自動生成&#xff0c;如何生成可參考右邊的幫助文檔 文章目錄一、報錯二、解決方法1.先編譯linux內核源碼2.再重新編譯驅動程序一、報錯 在編譯驅動程序過程中&#xff0c;經常碰到的一個小問題&#xff1a; make -C /home/lu…

Java面試寶典:MySQL中的鎖

InnoDB中鎖的類型非常多,總體上可以如下分類: 這些鎖都是做什么的?具體含義是什么?我們現在來一一學習。 1. 解決并發事務問題 我們已經知道事務并發執行時可能帶來的各種問題。最大的一個難點是:一方面要最大程度地利用數據庫的并發訪問能力,另一方面又要確保每個用戶…

設備識別最佳實踐:四維交叉驗證框架

設備識別最佳實踐&#xff1a;四維交叉驗證框架 1. MAC地址分析&#xff08;40%權重&#xff09; - 設備身份核驗 核心方法&#xff1a; # MAC地址標準化&#xff08;OUI提取&#xff09; mac"B4:2E:99:FB:9D:78" oui$(echo $mac | tr -d : | cut -c 1-6 | tr a-f A-…

《Java 程序設計》第 9 章 - 內部類、枚舉和注解

大家好&#xff0c;今天我們來學習《Java 程序設計》第 9 章的內容 —— 內部類、枚舉和注解。這三個知識點是 Java 中提升代碼靈活性和可讀性的重要工具&#xff0c;在實際開發中非常常用。接下來我們逐一展開講解&#xff0c;每個知識點都會配上可直接運行的代碼示例&#xf…

CTF Misc入門篇

在CTF比賽中&#xff0c;misc方向是必考的一個方向&#xff0c;其中&#xff0c;圖形隱寫是最最常見的類型。 先從Misc開始入門&#xff0c;一般會借助CTF SHOW解題平臺&#xff0c;解題&#xff0c;然后進行技巧總結。 目錄 圖片篇(基礎操作) misc1 misc2 misc3 misc4 …

Vulnhub 02 Breakout靶機

一、信息收集 我是在僅主機模式下掃描的。 以此去訪問端口。 80端口是上面的主頁&#xff0c;查看一下源代碼&#xff0c;發現了如下圖所示的注釋&#xff0c;翻譯過來是&#xff1a;別擔心&#xff0c;沒有人會來這里&#xff0c;安全地與你分享我的訪問權限&#xff0c;它是…

論文閱讀:2024 arxiv AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks

總目錄 大模型安全相關研究&#xff1a;https://blog.csdn.net/WhiffeYF/article/details/142132328 AutoDefense: Multi-Agent LLM Defense against Jailbreak Attacks https://arxiv.org/pdf/2403.04783#page9.14 https://www.doubao.com/chat/14064782214316034 文章目錄…

Spring Boot 請求限流實戰:基于 IP 的高效防刷策略

前言 互聯網流量就像洪水猛獸,來得快去得也快。如果不給接口裝個“限速閥”,服務器瞬間被刷爆,宕機成真,根本不稀奇。沒有限流機制,系統就像沒有剎車的賽車,跑得太快反而翻車。為了保證服務穩定、響應迅速,保護后端資源不被惡意請求掏空,限流成必備武器。 本篇文章將…

機器學習第二課之線性回歸的實戰技巧

1 線性回歸簡介 1 線性回歸應用場景 線性回歸是一種用于分析自變量與連續型因變量之間線性關系的模型&#xff0c;其核心是通過擬合線性方程(y w_1x_1 w_2x_2 ... w_nx_n b&#xff09;來預測因變量或解釋自變量的影響。由于其簡單、可解釋性強的特點&#xff0c;線性回歸…

【時時三省】(C語言基礎)指向指針數據的指針變量

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省在了解了指針數組的基礎上&#xff0c;需要了解指向指針數據的指針變量&#xff0c;簡稱為指向指針的指針。怎樣定義一個指向指針數據的指針變量呢?下面定義一個指向指針數據的指針變量&#…

前端css 的固定布局,流式布局,彈性布局,自適應布局,響應式布局

1. 固定布局容器的寬高是固定的&#xff0c;單位一般是px&#xff0c;不會隨著屏幕大小變化2.流式布局&#xff08;百分比布局/vw&#xff09;vw: 視圖寬度的百分比,1vw代表視窗寬度的1% vh: 視圖高度的百分比,1vh代表視窗高度的1%特點: 寬度隨屏幕大小變化單位用%或vw 高度通常…

python學習DAY26打卡

DAY 26 函數專題1&#xff1a;函數定義與參數 內容&#xff1a; 函數的定義 變量作用域&#xff1a;局部變量和全局變量 函數的參數類型&#xff1a;位置參數、默認參數、不定參數 傳遞參數的手段&#xff1a;關鍵詞參數 傳遞參數的順序&#xff1a;同時出現三種參數類型時…