c++ STL容器之棧stack
阿新 • • 發佈:2018-12-30
Stack簡介
C++ Stack(堆疊) 是一個容器類的改編,為程式設計師提供了堆疊的全部功能,——也就是說實現了一個先進後出(FILO)的資料結構。
Stack初始化
stack<int> s;
通過s.push() 為棧賦值,如
s.push(1);
stack常用函式
這裡我們著重講解函式swap():
先看一段程式碼:
//以下程式碼用來測試swap()函式的作用 stack<int> s1,s2; //對棧s1賦值 s1.push(1); s1.push(2); s1.push(3); //對棧s2賦值 s2.push(9); s2.push(8); //此時s1內有三個值,s2內有兩個值 cout << "swap前s1的大小: " << s1.size() << endl; print(s1); cout << "swap前s2的大小: " << s2.size() << endl; print(s2); s1.swap(s2); cout << "swap後s1的大小: " << s1.size() << endl; print(s1); cout << "swap後s2的大小: " << s2.size() << endl; print(s2);
執行結果
由此,我們不難發現,所謂swap函式即是將兩個棧物件進行交換,相當於名字互換。
一個介紹棧函式的小程式
#include <iostream> #include <stack> using namespace std; //這裡我們抽象一個函式用來列印棧中的值 void print(stack<int> s) { while(!s.empty()) { //s.top()用來返回棧頂的值 cout << s.top() << endl; //s.pop()用來去除頂部元素 s.pop(); } } int main() { stack<int> s; cout << "判斷棧是否為空" << s.empty() << endl; cout << "初始化時棧的大小" << s.size() << endl; for(int i = 0; i < 10;i ++) { s.push(i); } cout << "判斷棧是否為空" << s.empty() << endl; cout << "初始化後棧的大小" << s.size() <<endl; cout << "棧的top指標的值" << s.top() << endl; //返回棧頂的元素 cout << "棧頂的元素: " << s.top() <<endl; //遍歷棧的元素 while(!s.empty()) { //s.top()用來返回棧頂的值 cout << "棧頂的值" << s.top() << endl; //s.pop()用來去除頂部元素 s.pop(); } cout << "判斷棧是否為空" << s.empty() << endl; cout << "呼叫pop()後棧的大小" << s.size() <<endl; //cout << "空棧的top指標的值" << s.top() << endl; //程式走到這一步會崩潰,因為top指標此時沒有任何指向 //以下程式碼用來測試swap()函式的作用 stack<int> s1,s2; //對棧s1賦值 s1.push(1); s1.push(2); s1.push(3); //對棧s2賦值 s2.push(9); s2.push(8); //此時s1內有三個值,s2內有兩個值 cout << "swap前s1的大小: " << s1.size() << endl; print(s1); cout << "swap前s2的大小: " << s2.size() << endl; print(s2); s1.swap(s2); cout << "swap後s1的大小: " << s1.size() << endl; print(s1); cout << "swap後s2的大小: " << s2.size() << endl; print(s2); return 0; }
執行結果