实现一个stack类模板
时间: 2024-03-22 08:39:12 浏览: 20
好的,下面是一个基本的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++实现一个stack
一个基本的 C++ 实现 Stack 的代码如下:
```cpp
#include <iostream>
#include <vector>
using namespace std;
template <typename T>
class Stack {
private:
vector<T> elems;
public:
void push(T const& elem) {
elems.push_back(elem);
}
void pop() {
if (elems.empty()) {
throw out_of_range("Stack<>::pop(): empty stack");
}
elems.pop_back();
}
T top() const {
if (elems.empty()) {
throw out_of_range("Stack<>::top(): empty stack");
}
return elems.back();
}
bool empty() const {
return elems.empty();
}
};
int main() {
try {
Stack<int> intStack;
Stack<string> stringStack;
intStack.push(7);
cout << intStack.top() << endl;
stringStack.push("hello");
cout << stringStack.top() << endl;
stringStack.pop();
stringStack.pop(); // 抛出异常,栈为空
} catch (exception const& ex) {
cerr << "Exception: " << ex.what() << endl;
return -1;
}
return 0;
}
```
这个 Stack 实现使用了 vector 容器,支持 push、pop、top 和 empty 操作。在这个实现中,Stack 是一个模板类,可以存储任何类型的对象。
c++使用类模板实现一个栈类
好的,以下是一个基于类模板实现的栈类的示例代码:
```c++
template <typename T>
class Stack {
private:
T* stackArray; // 存储栈元素的数组
int top; // 栈顶元素的下标
int capacity; // 栈的容量
public:
// 构造函数,创建一个空栈
Stack(int capacity = 10) {
this->capacity = capacity;
stackArray = new T[capacity];
top = -1;
}
// 析构函数,释放内存
~Stack() {
delete[] stackArray;
}
// 判断栈是否为空
bool isEmpty() {
return top == -1;
}
// 判断栈是否已满
bool isFull() {
return top == capacity - 1;
}
// 入栈操作
void push(T element) {
if (isFull()) {
cout << "Stack overflow!" << endl;
return;
}
stackArray[++top] = element;
}
// 出栈操作
T pop() {
if (isEmpty()) {
cout << "Stack underflow!" << endl;
return T();
}
return stackArray[top--];
}
// 获取栈顶元素
T getTop() {
if (isEmpty()) {
cout << "Stack is empty!" << endl;
return T();
}
return stackArray[top];
}
// 获取栈的元素个数
int size() {
return top + 1;
}
};
```
这个类模板实现了一个基本的栈数据结构,其中元素类型为模板参数T,可以根据实际需要进行实例化。使用示例:
```c++
Stack<int> s(5); // 创建一个容量为5的整型栈
s.push(1);
s.push(2);
s.push(3);
cout << s.pop() << endl; // 输出3
cout << s.getTop() << endl; // 输出2
cout << s.size() << endl; // 输出2
```
注意,这里的栈容量是在构造函数中指定的,如果不指定则默认为10。在入栈操作中,如果栈已满则会输出一条错误信息并返回。在出栈操作中,如果栈为空则同样会输出一条错误信息并返回一个默认值。