C++ STL容器之 stack


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
View Code

成員函數

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)

關系運算符

 取決於實際容器的關系運算符


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM