实现一个stack类模板
时间: 2024-03-22 18:39:12 浏览: 49
好的,下面是一个基本的stack类模板的实现:
```c++
template<class T>
class Stack {
private:
vector<T> data; // 存储数据的向量
public:
// 入栈操作
void push(T val) {
data.push_back(val);
}
// 出栈操作
void pop() {
if (!data.empty()) {
data.pop_back();
}
}
// 返回栈顶元素
T top() {
if (!data.empty()) {
return data.back();
}
return T(); // 返回默认值
}
// 判断栈是否为空
bool empty() {
return data.empty();
}
// 返回栈中元素的个数
int size() {
return data.size();
}
};
```
这个stack类模板使用了一个vector来存储数据,并提供了入栈、出栈、返回栈顶元素、判断栈是否为空、返回栈中元素个数等基本操作。注意,这个实现并不是线程安全的,如果需要在多线程环境下使用,需要进行加锁保护。
相关问题
参考C++ STL的stack类模板构造一个自定义的栈类模板
在C++中,标准库中的`std::stack`是一个容器适配器,它实现了基于LIFO(Last In First Out,后进先出)原则的数据结构。如果你想创建一个自定义的栈类模板,你可以参考`std::stack`的设计,并利用C++模板来实现通用性。这里是一个简单的示例:
```cpp
template <typename T>
class CustomStack {
private:
std::vector<T> elements; // 使用向量作为底层存储
public:
// 构造函数
CustomStack() {}
// 入栈操作
void push(const T& value) {
elements.push_back(value);
}
// 出栈操作
T pop() {
if (isEmpty()) throw std::runtime_error("Stack is empty");
return elements.pop_back(); // 返回并移除顶部元素
}
// 获取栈顶元素但不移除
T top() const {
if (isEmpty()) throw std::runtime_error("Stack is empty");
return elements.back();
}
// 判断栈是否为空
bool isEmpty() const {
return elements.empty();
}
// 检查栈大小
size_t size() const {
return elements.size();
}
// 清空栈
void clear() {
elements.clear();
}
};
```
这个`CustomStack`模板类支持`push`、`pop`等基本操作,同时也考虑到了一些异常处理,例如检查栈是否为空再进行操作。
c++堆栈类模板实现
好的,以下是一个简单的C++堆栈类模板实现:
```c++
template <typename T>
class Stack {
private:
T* data;
int top;
int capacity;
public:
Stack(int size = 100) {
data = new T[size];
top = -1;
capacity = size;
}
~Stack() {
delete[] data;
}
bool isEmpty() const {
return top == -1;
}
bool isFull() const {
return top == capacity - 1;
}
void push(const T& item) {
if (isFull()) {
throw "Stack is full!";
}
data[++top] = item;
}
T pop() {
if (isEmpty()) {
throw "Stack is empty!";
}
return data[top--];
}
};
```
阅读全文