在 C++ 里,棧是一種遵循后進先出(LIFO)原則的數據結構。下面從多個方面為你介紹 C++ 棧:
1. 使用標準庫中的std::stack
C++ 標準庫提供了std::stack
容器適配器,能方便地實現棧的功能。以下是簡單示例:
cpp
#include <iostream>
#include <stack>int main() {std::stack<int> myStack;// 入棧操作myStack.push(10);myStack.push(20);myStack.push(30);// 訪問棧頂元素std::cout << "棧頂元素: " << myStack.top() << std::endl;// 出棧操作myStack.pop();std::cout << "出棧后棧頂元素: " << myStack.top() << std::endl;// 檢查棧是否為空if (!myStack.empty()) {std::cout << "棧不為空,棧的大小: " << myStack.size() << std::endl;}return 0;
}
在這個示例中,首先創建了一個存儲int
類型元素的棧myStack
。接著使用push
方法將元素壓入棧,用top
方法訪問棧頂元素,用pop
方法移除棧頂元素,用empty
方法檢查棧是否為空,用size
方法獲取棧中元素的數量。
2. 自定義棧的實現
你也可以自己實現一個棧。以下是一個簡單的自定義棧的示例:
cpp
#include <iostream>
#include <vector>template <typename T>
class MyStack {
private:std::vector<T> elements;public:// 入棧操作void push(const T& value) {elements.push_back(value);}// 出棧操作void pop() {if (!elements.empty()) {elements.pop_back();}}// 訪問棧頂元素T top() const {if (!elements.empty()) {return elements.back();}throw std::out_of_range("Stack is empty");}// 檢查棧是否為空bool empty() const {return elements.empty();}// 獲取棧的大小size_t size() const {return elements.size();}
};int main() {MyStack<int> myStack;myStack.push(10);myStack.push(20);myStack.push(30);std::cout << "棧頂元素: " << myStack.top() << std::endl;myStack.pop();std::cout << "出棧后棧頂元素: " << myStack.top() << std::endl;if (!myStack.empty()) {std::cout << "棧不為空,棧的大小: " << myStack.size() << std::endl;}return 0;
}
這個示例中定義了一個模板類MyStack
,借助std::vector
來存儲棧中的元素,并且實現了push
、pop
、top
、empty
和size
等基本操作。
3. 棧的應用場景
棧在很多場景中都有應用,例如:
- 表達式求值:計算后綴表達式(逆波蘭表達式)時會用到棧。
- 函數調用:程序在執行過程中,函數調用的上下文信息(如局部變量、返回地址等)會被壓入棧中。
- 括號匹配:檢查括號是否匹配時,可以使用棧來實現。