目錄
- stack類的作用
- 什么是容器適配器
- stack的接口
- 構造函數
- empty
- size
- top
- push
- pop
- swap
- 關系運算符重載
- stack類的實現
stack類的作用
stack是stl庫提供的一種容器適配器,也就是我們數據結構中學到的棧,是非常常用的數據結構,特點是遵循LIFO(last in first out,也就是后進先出)原則。
什么是容器適配器
stl中提供的類很多都叫容器,但有一些叫做容器適配器,容器適配器到底是啥呢?我們不妨先拋掉容器這兩個字,先來談談適配器,適配器是軟件設計之中的一種概念,即基于原有的接口設計適配出用戶想要的接口,是一種設計模式,適配器這種設計模式提升了代碼復用性以及系統擴展性,降低了代碼的耦合度,是一種優秀的設計模式。那么對于容器適配器來說,就是利用已有的容器進行各種操作封裝出新的類,這就叫容器適配器。
stack的接口
構造函數
explicit stack (const container_type& ctnr = container_type());
一般來說不用給參數,直接調用默認構造就行。
empty
bool empty() const;
棧的判空。
size
size_type size() const;
返回棧的元素數。
top
value_type& top();
const value_type& top() const;
返回棧頂元素。
push
void push (const value_type& val);
入棧。
pop
void pop();
出棧。
swap
void swap (stack& x) noexcept(/*see below*/);
棧自己的交換函數。
關系運算符重載
template <class T, class Container>bool operator== (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator!= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator< (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator<= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator> (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
template <class T, class Container>bool operator>= (const stack<T,Container>& lhs, const stack<T,Container>& rhs);
stack類的實現
#define _CRT_SECURE_NO_WARNINGS 1#include<iostream>#include<deque>using namespace std;namespace jiunian
{template<class T, class container = deque<T>>class stack{public:typedef stack<T, container> Self;//stack()//{//}//stack(Self& x):// con(x.con)//{//}//~stack()//{//}bool empty()const{return con.empty();}size_t size()const{return con.size();}T& top(){return con.back();}const T& top() const{return con.back();}void push(const T& val){con.push_back(val);}void pop(){con.pop_back();}void swap(Self& x){con.swap(x.con);}Self operator=(Self x){con = x.con;return *this;}private:container con;};
}
stack作為一個容器適配器,實現起來相比其他容器明顯簡單了不少,因為其作為容器適配器只需要對其他容器的接口進行封裝就行,不需要自己造輪子。實現過程一看就懂,不做過多贅述。