C++ stack适配器基于vector、deque或list实现LIFO结构,提供push、pop、top操作,适用于括号匹配、表达式求值等场景,可通过自定义容器实现有界栈以满足特定需求。

C++
stack
vector
deque
list
C++
stack
push
pop
top
#include <iostream>
#include <stack>
#include <vector>
int main() {
// 使用 vector 作为底层容器
std::stack<int, std::vector<int>> myStack;
myStack.push(10);
myStack.push(20);
myStack.push(30);
std::cout << "Top element: " << myStack.top() << std::endl; // 输出: 30
myStack.pop();
std::cout << "Top element after pop: " << myStack.top() << std::endl; // 输出: 20
std::cout << "Stack size: " << myStack.size() << std::endl; // 输出: 2
return 0;
}在这个例子中,我们使用了
std::vector
std::stack
std::deque
std::list
std::deque
选择
stack
vector
vector
deque
list
立即学习“C++免费学习笔记(深入)”;
例如,如果你的栈需要频繁地插入和删除元素,但很少访问中间元素,那么
list
vector
deque
#include <iostream>
#include <stack>
#include <deque>
int main() {
// 使用 deque 作为底层容器
std::stack<int, std::deque<int>> myStack;
myStack.push(10);
myStack.push(20);
myStack.push(30);
std::cout << "Top element: " << myStack.top() << std::endl;
return 0;
}stack
下面是一个使用
stack
#include <iostream>
#include <stack>
#include <string>
bool isMatching(const std::string& expression) {
std::stack<char> s;
for (char c : expression) {
if (c == '(' || c == '[' || c == '{') {
s.push(c);
} else if (c == ')' || c == ']' || c == '}') {
if (s.empty()) {
return false; // 缺少左括号
}
char top = s.top();
s.pop();
if ((c == ')' && top != '(') ||
(c == ']' && top != '[') ||
(c == '}' && top != '{')) {
return false; // 括号不匹配
}
}
}
return s.empty(); // 所有括号都匹配
}
int main() {
std::string expression1 = "([]{})";
std::string expression2 = "([)]";
std::cout << expression1 << " is matching: " << isMatching(expression1) << std::endl; // 输出: true
std::cout << expression2 << " is matching: " << isMatching(expression2) << std::endl; // 输出: false
return 0;
}虽然
vector
deque
list
stack
要自定义
stack
push_back
pop_back
back
empty
size
下面是一个使用固定大小数组实现有界栈的例子:
#include <iostream>
#include <stack>
template <typename T, size_t N>
class BoundedArray {
private:
T data[N];
size_t currentSize = 0;
public:
void push_back(const T& value) {
if (currentSize == N) {
throw std::overflow_error("Stack overflow");
}
data[currentSize++] = value;
}
void pop_back() {
if (currentSize == 0) {
throw std::underflow_error("Stack underflow");
}
currentSize--;
}
T& back() {
if (currentSize == 0) {
throw std::underflow_error("Stack is empty");
}
return data[currentSize - 1];
}
bool empty() const {
return currentSize == 0;
}
size_t size() const {
return currentSize;
}
};
int main() {
std::stack<int, BoundedArray<int, 5>> myStack;
try {
myStack.push(10);
myStack.push(20);
myStack.push(30);
myStack.push(40);
myStack.push(50);
myStack.push(60); // 触发 overflow
} catch (const std::exception& e) {
std::cerr << "Exception: " << e.what() << std::endl; // 输出: Stack overflow
}
std::cout << "Stack size: " << myStack.size() << std::endl; // 输出: 5
return 0;
}在这个例子中,我们创建了一个
BoundedArray
BoundedArray
push_back
pop_back
back
empty
size
stack
push_back
std::overflow_error
pop_back
back
std::underflow_error
以上就是C++ stack适配器 后进先出数据结构应用的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号