如何声明和定义satck
时间: 2024-10-17 19:05:14 浏览: 6
在C++中,`stack`通常指的是C++标准库中的一个容器适配器,用于实现后进先出(LIFO,Last In First Out)的数据结构。如果你想自定义一个栈,比如基于数组或链表实现的简单版本,而不是使用标准库的`stack`,你可以创建一个类似`vector`的栈或者其他基础类型的容器,然后添加相应的入栈(push)、出栈(pop)和查看顶部元素(top)等操作。这里是一个基本的示例,展示如何声明和定义一个简单的基于数组的栈模板类:
```cpp
#include <iostream>
#include <stdexcept>
template<typename T>
class MyStack {
private:
T* data; // 存储元素的数组
size_t top; // 栈顶元素的索引
static constexpr size_t DEFAULT_CAPACITY = 10;
public:
// 构造函数,默认容量为10
MyStack(size_t capacity = DEFAULT_CAPACITY) : data(new T[capacity]), top(0) {}
// 插入元素到栈顶
void push(const T& value) {
if (top == data.capacity()) {
throw std::runtime_error("Stack overflow");
}
data[top++] = value;
}
// 删除并返回栈顶元素
T pop() {
if (empty()) {
throw std::runtime_error("Stack underflow");
}
T result = data[top];
data[top--] = T(); // 简化示例,实际应清理掉最后一个元素
return result;
}
// 查看但不移动栈顶元素
T top() const {
if (empty()) {
throw std::runtime_error("Invalid operation on empty stack");
}
return data[top];
}
// 判断栈是否为空
bool empty() const {
return top == 0;
}
// 销毁栈,释放内存
~MyStack() {
delete[] data;
}
};
```
上述代码定义了一个模板类`MyStack`,其中`T`是类型模板参数,用于支持不同类型的数据。注意这里只是一个简化的例子,实际应用中可能需要考虑更多细节,如动态扩容、安全性检查等。
阅读全文