日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

c++中容器适配器

發(fā)布時間:2023/11/30 44 豆豆
生活随笔 收集整理的這篇文章主要介紹了 c++中容器适配器 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

什么是容器適配器

適配器是一種設(shè)計模式(設(shè)計模式是一套被反復(fù)使用的、多數(shù)人知曉的、經(jīng)過分類編目的、代碼設(shè)計經(jīng)驗的總結(jié)),該中模式是將一個類的接口轉(zhuǎn)換成客戶希望的另外一個接口。

stack模擬封裝

template<class T,class Container = deque<T>>class stack{public:stack(){}void push(const T& data){_con.push_back(data);}void pop(){_con.pop_back();}size_t size()const{return _con.size();}bool empty()const{return _con.empty();}T& top(){return _con.back();}const T& top()const{return _con.back();}private:Container _con;};

queue模擬封裝

template<class T , class Container = deque<T>>class queue{public:queue(){}void push(const T& data){_con.push_back(data);}void pop(){_con.pop_front();}T& front(){return _con.front()}const T& front()const{return _con.front()}T& back(){return _con.back();}const T& back()const{return _con.back()}size_t size()const{return _con.size();}bool empty()const{return _con.empty();}private:Container _con;};
  • 每種容器都提供了一組接口,如果容器中的接口不能滿足需求,那么重新編寫容器還是改變我們的需求
  • 應(yīng)該構(gòu)造一個容器接口到需求接口之間的轉(zhuǎn)換器,稱為容器適配器。
  • 容器適配器將原容器進行了一層封裝,底層基于普通容器,上層對外提供封裝后的新接口,滿足不同使用者的需求。常用的棧stack、隊列deque、優(yōu)先級隊列priority_queue在STL中都有自己的容器適配器。
  • 容器適配器對使用者是個黑盒,使用者無需知道容器適配器封裝的容器類型,而只需了解容器適配器提供的接口。除了使用STL提供的容器適配器,也可以自己構(gòu)造容器適配器,將STL中的容器進行封裝,對外提供所需的接口。
  • 容器適配器可以封裝的容器類型根據(jù)容器適配器對外提供的接口和容器適配器的內(nèi)部算法而定。但是任何容器適配器對底層容器都有一些通用的要求,例如,底層容器必須支持添加刪除 和訪問尾元素操作,因此array不能作為容器適配器的底層容器。
  • 棧適配器和隊列適配器默認的底層容器是deque,優(yōu)先隊列適配器默認的底層容器是vector。在創(chuàng)建容器適配器的對象時,也可以指定其他合理的容器作為容器適配器的底層容器。創(chuàng)建容器適配器對象的方式如下
棧:stack<int> s;//默認使用dequestack<int,vector<int>> s;//指定使用vector 隊列:queue<int> q;//默認使用dequequeue<int,lise<int>> q;//指定使用list優(yōu)先隊列:priority_queue<int> p;//默認使用vectorpriority_queue<int,deque<int>> p;//指定使用dequepriority_queue<int,vector<int>,cmp>> p;//指定使用vector和權(quán)重比較函數(shù)cmp

注意事項
容器適配器和底層容器是組合的關(guān)系,插入容器適配器中的元素最終都保存在底層容器中,容器適配器中的數(shù)據(jù)成員包括一個用于存儲元素的底層容器對象和一些輔助數(shù)據(jù)。

為什么選擇deque作為stack和queue的底層默認容器

stack是一種后進先出的特殊線性數(shù)據(jù)結(jié)構(gòu),因此只要具有push_back()和pop_back()操作的線性結(jié)構(gòu),都可 以作為stack的底層容器,比如vector和list都可以;queue是先進先出的特殊線性數(shù)據(jù)結(jié)構(gòu),只要具有 push_back和pop_front操作的線性結(jié)構(gòu),都可以作為queue的底層容器,比如list。但是STL中對stack和 queue默認選擇deque作為其底層容器,主要是因為:

  • stack和queue不需要遍歷(因此stack和queue沒有迭代器),只需要在固定的一端或者兩端進行操作。
  • 在stack中元素增長時,deque比vector的效率高;queue中的元素增長時,deque不僅效率高,而且內(nèi) 存使用率高。
  • 總結(jié)

    以上是生活随笔為你收集整理的c++中容器适配器的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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