本篇 ShengYu 將介紹 C++ std::stack 用法與範例,stack 是個很基本也很重要的資料結構,stack 是後進先出原則(LIFO,Last In First Out),在很多考題上都容易出現,stack 常用基本的操作方法有 push()、pop()、top(),是必學的基本功能。  
因為 stack 的後進先出原則,你只能看到最上面 top 的元素是什麼,之前推 push 進去的元素無法去遍歷查看的。  
以下 C++ stack 用法與範例將分為這幾部分,  
將元素放入 stack 頂端   
從 stack 頂端移出元素   
取得 stack 裡的元素數量   
判斷 stack 是否為空   
stack 查看最頂端的元素   
 
要使用 stack 容器的話,需要引入的標頭檔 :<stack>  
將元素放入 stack 頂端 stack 頂端要推入新元素的話,可以使用 push(),std-stack.cpp 1 2 3 4 5 std ::stack <int > mystack;mystack.push(1 ); mystack.push(2 ); mystack.push(3 ); std ::cout  << mystack.size() << "\n" ; 
也可以從在 stack 建構時帶入元素,例如從 vector 複製元素,1 2 3 std ::vector <int > myvector = {4 , 5 };std ::stack <int , std ::vector <int >> mystack2(myvector);std ::cout  << mystack2.size() << "\n" ; 
也可以從在 stack 建構時從 deque 複製元素,1 2 3 std ::deque <int > mydeque = {6 , 7 , 8 };std ::stack <int , std ::deque <int >> mystack3(mydeque);std ::cout  << mystack3.size() << "\n" ; 
   
從 stack 頂端移出元素 stack 頂端要移出元素的話,要使用 pop(),std-stack2.cpp 1 2 3 4 5 6 7 std ::stack <int > mystack;mystack.push(1 ); mystack.push(2 ); std ::cout  << mystack.size() << "\n" ; mystack.pop(); mystack.pop(); mystack.pop();  
值得注意的是,上例中 stack 為空時再 pop 會讓程式崩潰, 為了避免程式崩潰,所以通常在 pop 時會對 stack 進行檢查是否為空,非空才 pop(),例如下面這樣,1 2 3 4 5 6 7 8 9 10 11 12 13 14 std ::stack <int > mystack;mystack.push(1 ); mystack.push(2 ); std ::cout  << mystack.size() << "\n" ; if  (!mystack.empty()) {    mystack.pop(); } if  (!mystack.empty()) {    mystack.pop(); } std ::cout  << mystack.size() << "\n" ; if  (!mystack.empty()) {    mystack.pop(); } 
   
取得 stack 裡的元素數量 stack 要取得 stack 裡元素數量要使用 size(),std-stack3.cpp 1 2 3 4 5 6 std ::stack <char > mystack;std ::cout  << mystack.size() << "\n" ;mystack.push('a' ); std ::cout  << mystack.size() << "\n" ;mystack.push('b' ); std ::cout  << mystack.size() << "\n" ;
輸出為
從 vector 複製元素初始化 stack,並且印出數量1 2 3 4 std ::vector <int > myvector = {1 , 2 };std ::stack <int , std ::vector <int >> mystack2(myvector);std ::cout  << mystack2.size() << "\n" ; 
   
判斷 stack 是否為空 stack 要判斷是否為空的話,可以使用 empty(),std-stack4.cpp 1 2 3 4 5 6 7 8 9 10 11 12 std ::stack <int > mystack;if  (mystack.empty())    std ::cout  << "empty\n" ; else     std ::cout  << "not empty\n" ; mystack.push(1 ); if  (mystack.empty())    std ::cout  << "empty\n" ; else     std ::cout  << "not empty\n" ; 
輸出為
   
stack 查看最頂端的元素 stack 要查看最頂端的元素,可以使用 top(),要注意的是如果 stack 為空時呼叫 top() 會 Segmentation fault,正確作法為先判斷 stack 是否為空,stack 不為空才呼叫 top()。std-stack5.cpp 1 2 3 4 5 6 7 8 9 std ::stack <int > mystack;if  (!mystack.empty())    std ::cout  << mystack.top() << "\n" ; mystack.push(1 ); mystack.push(2 ); mystack.push(3 ); if  (!mystack.empty())    std ::cout  << mystack.top() << "\n" ;  
以上就是 C++ std::stack 用法與範例的介紹, 如果你覺得我的文章寫得不錯、對你有幫助的話記得 Facebook 按讚 支持一下!  
其他參考 stack - C++ Referencehttps://www.cplusplus.com/reference/stack/stack/   
leetcode 一些使用到 stack 的題目 Valid Parentheseshttps://leetcode.com/problems/valid-parentheses/  Min Stackhttps://leetcode.com/problems/min-stack/   
其它相關文章推薦  如果你想學習 C++ 相關技術,可以參考看看下面的文章,C/C++ 新手入門教學懶人包 std::queue 用法與範例 std::deque 介紹與用法 std::vector 用法與範例 std::set 用法與範例 std::map 用法與範例 std::unordered_map 用法與範例 std::thread 用法與範例 std::mutex 用法與範例 std::find 用法與範例 std::sort 用法與範例 std::random_shuffle 產生不重複的隨機亂數 std::shared_ptr 用法與範例 std::async 用法與範例