C++ STL : 模拟实现STL中的容器适配器stack和queue
目錄
- 什么是容器適配器
- stack
- stack的文檔介紹-(來(lái)自cplusplus)
- stack的實(shí)現(xiàn)
- queue
- queue的文檔介紹-(來(lái)自cplusplus)
- queue的實(shí)現(xiàn)
什么是容器適配器
之前模擬實(shí)現(xiàn)的vector,string,list等都是容器,而這次要實(shí)現(xiàn)的stack和queue則是容器適配器,那么什么是容器適配器呢?
適配器其實(shí)就是一個(gè)轉(zhuǎn)換裝置,這種東西在生活中非常常見(jiàn)。例如將USB接口轉(zhuǎn)為Type-c接口,就可以在手機(jī)上用U盤,又或者三腳插頭轉(zhuǎn)二腳插頭,方便使用更多的插座。適配器的作用就是在不更換設(shè)備的情況下,能讓我們的設(shè)備適用于其他情景,或者擁有別的功能。
在STL中,stack和queue其實(shí)就是傳統(tǒng)數(shù)據(jù)結(jié)構(gòu)中的棧和隊(duì)列,我們并不關(guān)心他的底層是什么,因?yàn)槲覀?strong>只需要保證他具有后進(jìn)先出和先進(jìn)先出的特點(diǎn)即可,這個(gè)特點(diǎn),無(wú)論是使用vector,還是list都可以實(shí)現(xiàn),既然這樣,那就干脆將其作為一個(gè)適配器,不需要再創(chuàng)建新的容器,而是直接在原有的容器上實(shí)現(xiàn)他的特性即可,并且這個(gè)容器可以有多種選擇。
stack
stack的文檔介紹-(來(lái)自cplusplus)
stack的實(shí)現(xiàn)
stack的實(shí)現(xiàn)其實(shí)就是棧的實(shí)現(xiàn),只需要在復(fù)用原有代碼的基礎(chǔ)上增加stl的特性即可,
下面是之前數(shù)據(jù)結(jié)構(gòu)篇章時(shí)實(shí)現(xiàn)的棧
棧的實(shí)現(xiàn)
庫(kù)中默認(rèn)選擇的容器是deque
#include<deque>namespace lee {/*STL底層中的容器選擇的是deque,因?yàn)閐eque是假想的連續(xù)空間,他每次插入時(shí)擴(kuò)容都會(huì)直接在插入的地方直接插入一片固定大小的空間,這樣就保證了邏輯上的線性,不需要拷貝數(shù)據(jù)。而vector每次擴(kuò)容,都需要?jiǎng)?chuàng)建新空間,拷貝原數(shù)據(jù),銷毀原空間,并且開(kāi)的空間是原數(shù)據(jù)的1.5倍或2倍(不同版本)vector不僅效率不比deque高,空間的利用率也不高,多次擴(kuò)容會(huì)導(dǎo)致空間的碎片化*/template<class T, class Container = std::deque<T>>class stack{public:void push(const T& val){_con.push_back(val);}void pop(){_con.pop_back();}T& top() {return _con.back();}const T& top() const{return _con.back();}size_t size() const{return _con.size();}bool empty() const{return _con.empty();}private:Container _con;}; }queue
queue的文檔介紹-(來(lái)自cplusplus)
pop_front:在隊(duì)列頭部出隊(duì)列
queue的實(shí)現(xiàn)
隊(duì)列的實(shí)現(xiàn)
庫(kù)中默認(rèn)選擇的容器是deque
#include<deque>namespace lee {/*STL中queue底層的容器是deque,因?yàn)閐eque和list一樣插入刪除的效率都是O(1),并且deque的效率更高,因?yàn)閘ist是一次創(chuàng)建一個(gè)結(jié)點(diǎn)后插入,并且這些空間是離散分布的.deque是每次創(chuàng)建一個(gè)固定大小的空間,并在這塊空間上面進(jìn)行插入刪除,這樣的效率更高,并且因?yàn)樯暾?qǐng)的空間都是一段一段的連續(xù)空間,內(nèi)存的利用率更高*/template<class T, class Container = std::deque<T>>class queue{public:void push(const T& val){_con.push_back(val);}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;}; }總結(jié)
以上是生活随笔為你收集整理的C++ STL : 模拟实现STL中的容器适配器stack和queue的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 操作系统 :银行家算法的实现(C++)
- 下一篇: C++ STL : 模拟实现STL中的容