STL 中的 stack 是一種容器適配器,而不是一種容器。
它是容器適配器是指,只要支持一系列方法的容器(empty, size, back, push_back, pop_back),都能作為stack使用。
stack 有可能實際上是一個 vector, deque 或 list. 如果沒有特殊指明,將使用 deque作為stack的實際容器。
構造函數
構造函數中包含兩個模板參數。stack<stack::alue_type T, stack::container_type Container>
其中 T代表數值類型,可以是基本數據類型或用戶自定義類型。
Container代表容器類型,可以是 vector, deque 或 list
1 std::stack<int> first; // empty stack 2 std::stack<int> second(mydeque); // stack initialized to copy of deque 3 std::stack<int, std::vector<int>> third; // empty stack using vector 4 std::stack<int, std::vector<int>> fourth(myVector); // stack initialized to copy of vector using vector
成員函數
empty()
測試棧是否為空,為空返回true,否則返回false。
bool empty() const;
size()
返回棧中元素的個數
size_type size() const;
top()
返回棧頂元素(最后push進來的那個)的引用。
referenc& top();
push(val)
壓一個值到棧中,其值將被初始化為 val
void push(const value_type& val);
pop()
將棧頂元素彈出,注意這個函數無返回值,如果需要獲取棧頂元素,應先調用top(),再pop()
void pop();
emplace(Args..)
emplace 功能上與 push相同。不過emplace更高效。
emplace 的參數不是容器元素本身,而是構造容器元素所需要的參數。即如果容器元素是一個類的對象,那么Args就是這個類構造函數的參數。
push 是先構造一個 temporary 的元素對象,再將這個對象拷貝到容器中。而emplace是直接在容器內用參數構造一個對象。省略了拷貝的時間消耗。
emplace 本質上是調用了各容器的 emplace_back(args...)函數
swap()
swap將兩個 stack的內容交換。這兩個 stack的模板參數 T和 Container必須都相同。
void swap(stack& x) 重載1:x.swap(y)
void swap(stack& x, stack& y) 重載2: swap(x, y)
關系運算符
取決於實際容器的關系運算符
