C++ STL : 模拟实现STL中的容器适配器stack和queue
生活随笔
收集整理的這篇文章主要介紹了
C++ STL : 模拟实现STL中的容器适配器stack和queue
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
目錄
- 什么是容器適配器
- stack
- stack的文檔介紹-(來自cplusplus)
- stack的實現(xiàn)
- queue
- queue的文檔介紹-(來自cplusplus)
- queue的實現(xiàn)
什么是容器適配器
之前模擬實現(xiàn)的vector,string,list等都是容器,而這次要實現(xiàn)的stack和queue則是容器適配器,那么什么是容器適配器呢?
適配器其實就是一個轉換裝置,這種東西在生活中非常常見。例如將USB接口轉為Type-c接口,就可以在手機上用U盤,又或者三腳插頭轉二腳插頭,方便使用更多的插座。適配器的作用就是在不更換設備的情況下,能讓我們的設備適用于其他情景,或者擁有別的功能。
在STL中,stack和queue其實就是傳統(tǒng)數(shù)據(jù)結構中的棧和隊列,我們并不關心他的底層是什么,因為我們只需要保證他具有后進先出和先進先出的特點即可,這個特點,無論是使用vector,還是list都可以實現(xiàn),既然這樣,那就干脆將其作為一個適配器,不需要再創(chuàng)建新的容器,而是直接在原有的容器上實現(xiàn)他的特性即可,并且這個容器可以有多種選擇。
stack
stack的文檔介紹-(來自cplusplus)
stack的實現(xiàn)
stack的實現(xiàn)其實就是棧的實現(xiàn),只需要在復用原有代碼的基礎上增加stl的特性即可,
下面是之前數(shù)據(jù)結構篇章時實現(xiàn)的棧
棧的實現(xiàn)
庫中默認選擇的容器是deque
#include<deque>namespace lee {/*STL底層中的容器選擇的是deque,因為deque是假想的連續(xù)空間,他每次插入時擴容都會直接在插入的地方直接插入一片固定大小的空間,這樣就保證了邏輯上的線性,不需要拷貝數(shù)據(jù)。而vector每次擴容,都需要創(chuàng)建新空間,拷貝原數(shù)據(jù),銷毀原空間,并且開的空間是原數(shù)據(jù)的1.5倍或2倍(不同版本)vector不僅效率不比deque高,空間的利用率也不高,多次擴容會導致空間的碎片化*/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的文檔介紹-(來自cplusplus)
pop_front:在隊列頭部出隊列
queue的實現(xiàn)
隊列的實現(xiàn)
庫中默認選擇的容器是deque
#include<deque>namespace lee {/*STL中queue底層的容器是deque,因為deque和list一樣插入刪除的效率都是O(1),并且deque的效率更高,因為list是一次創(chuàng)建一個結點后插入,并且這些空間是離散分布的.deque是每次創(chuàng)建一個固定大小的空間,并在這塊空間上面進行插入刪除,這樣的效率更高,并且因為申請的空間都是一段一段的連續(xù)空間,內存的利用率更高*/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;}; }總結
以上是生活随笔為你收集整理的C++ STL : 模拟实现STL中的容器适配器stack和queue的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 操作系统 :银行家算法的实现(C++)
- 下一篇: C++ STL : 模拟实现STL中的容