试编写一个动态栈的类模板(包括其成员函数的实现),以便为任何类型的对象提供栈结构的数据操作。
时间: 2024-03-20 16:45:17 浏览: 18
以下是一个动态栈的类模板的实现,包含了基本的栈操作函数:
```c++
template <typename T>
class DynamicStack {
private:
int top;
int capacity;
T* data;
public:
DynamicStack(): top(-1), capacity(0), data(nullptr) {}
DynamicStack(int size): top(-1), capacity(size), data(new T[size]) {}
~DynamicStack() { delete[] data; }
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == capacity - 1;
}
int size() const {
return top + 1;
}
void push(const T& item) {
if (isFull()) {
T* newData = new T[capacity * 2];
for (int i = 0; i < capacity; i++) {
newData[i] = data[i];
}
delete[] data;
data = newData;
capacity *= 2;
}
top++;
data[top] = item;
}
T pop() {
if (isEmpty()) {
throw std::exception("Stack is empty");
}
top--;
return data[top + 1];
}
T peek() const {
if (isEmpty()) {
throw std::exception("Stack is empty");
}
return data[top];
}
};
```
这个类模板可以适用于任何类型的对象,并提供了基本的栈操作函数。其中,使用了动态数组来实现动态扩展栈的大小,当栈满时,会将数组大小扩展为原来的两倍。同时,还提供了异常处理,当栈为空时,进行pop和peek操作会抛出异常。