一、c++ Stack類
Stack是一個後進先出(LIFO)的數據結構,c++ STL中的stack類也是基於此設計。c++ stack類可以存儲同一數據類型的元素,其主要操作有入棧(push())和出棧(pop())。
#include <stack> using namespace std; int main() { stack<int> stack1; // 聲明一個存儲int類型的stack stack1.push(1); // 入棧 stack1.push(2); stack1.push(3); cout << "棧頂元素: " << stack1.top() << endl; // 輸出棧頂元素 stack1.pop(); // 出棧 cout << "棧大小: " << stack1.size() << endl; return 0; }
運行結果:
棧頂元素: 3
棧大小: 2
二、c++ Stack實現
c++ stack類通常是通過deque(雙端隊列)來實現的,也可以使用vector、list等STL容器來實現。
template <class T, class Container = deque <T> > class stack { public: explicit stack(const Container& ctnr = Container()); // 構造函數 bool empty() const; // 判斷棧是否為空 size_t size() const; // 返回棧的大小 T& top(); // 返回棧頂元素的引用 const T& top() const; // 返回棧頂元素的值 void push(const T& val); // 入棧 void pop(); // 出棧 Container& get_container(); // 返回容器 };
三、c++ Stack函數
除了push()和pop()之外,c++ Stack類還提供了其他一些有用的函數,例如empty()、size()、top()等。
empty(): 判斷棧是否為空
size(): 返回棧的大小
top(): 返回棧頂元素的引用
push(): 入棧
pop(): 出棧
四、c++ Stack計算器
我們可以使用c++ stack類實現一個簡單的計算器。例如輸入字元串”3 4 +”,計算3+4的值。
#include <iostream> #include <stack> #include <string> using namespace std; int main() { stack<int> stack1; string str = "3 4 +"; int len = str.length(); for (int i = 0; i < len; i++) { if (str[i] == ' ') { continue; } else if (isdigit(str[i])) { // 數字入棧 int num = 0; while (i < len && isdigit(str[i])) { num = num * 10 + (str[i] - '0'); i++; } i--; stack1.push(num); } else { // 運算符出棧 int tmp1 = stack1.top(); stack1.pop(); int tmp2 = stack1.top(); stack1.pop(); switch (str[i]) { case '+': stack1.push(tmp2 + tmp1); break; case '-': stack1.push(tmp2 - tmp1); break; case '*': stack1.push(tmp2 * tmp1); break; case '/': stack1.push(tmp2 / tmp1); break; } } } cout << stack1.top() << endl; return 0; }
運行結果:
7
五、c++ Stack用法
c++ Stack類在實際開發中用途很廣泛,例如可以用來解決括弧匹配問題、中綴表達式轉後綴表達式、逆波蘭表達式求值等問題。
六、c++ Stack彈出
c++ Stack類中的pop()函數會將棧頂元素彈出,但並不返回其值,如果需要獲取其值,可以使用top()函數先獲取其值再彈出。
七、c++ Stack頭文件
c++ stack類的頭文件是<stack>
八、c++ Stack出錯
由於c++ Stack類是基於STL容器實現的,所以在使用時需要注意容器的大小、類型等問題。如果將不同類型的元素存儲在同一個stack中,可能會引起類型錯誤。
九、c++ Stack不是容器
需要注意的是,c++ Stack類不是STL容器,它只是基於STL容器實現的一種數據結構。
十、c++ Stack知識點選取
選取的c++ Stack知識點包括類的定義、實現方式、常用函數、實際用途、出錯等問題。
原創文章,作者:HUAG,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137449.html