c++ 实现支持多数据类型且长度有限的栈
时间: 2024-10-20 11:09:26 浏览: 17
C/C++函数调用栈的实现方法
在 C++ 中,可以使用模板 (Templates) 和容器类如 std::stack 来实现一个多数据类型且长度有限的栈。std::stack 是 C++ 标准库中的一个容器适配器,它基于 LIFO(Last In First Out,后进先出)策略,底层通常是数组或链表。
以下是使用 std::stack 实现的一个简单示例,这里我们创建了一个模板类 StackTemplate,它可以存储不同类型的数据,并限制了元素的最大容量:
```cpp
#include <iostream>
#include <stack>
#include <typeinfo>
template <typename T, size_t MAX_SIZE>
class StackTemplate {
public:
// 构造函数
StackTemplate() : top_(0), capacity_(MAX_SIZE) {}
// 检查是否已满
bool is_full() const { return top_ == capacity_; }
// 检查是否为空
bool is_empty() const { return top_ == 0; }
// 入栈操作
void push(const T& value) {
if (!is_full()) {
elements_.push_back(value);
++top_;
} else {
std::cerr << "Stack overflow!" << std::endl;
}
}
// 出栈操作
void pop() {
if (!is_empty()) {
elements_.pop_back();
--top_;
} else {
std::cerr << "Stack underflow!" << std::endl;
}
}
// 获取栈顶元素
T& top() {
if (is_empty()) {
throw std::runtime_error("Stack is empty");
}
return elements_[top_ - 1];
}
private:
size_t top_; // 栈顶指针
size_t capacity_; // 容量限制
std::vector<T> elements_; // 存储栈元素
};
int main() {
StackTemplate<int, 5> int_stack;
StackTemplate<std::string, 3> str_stack;
int_stack.push(1);
int_stack.push(2);
str_stack.push("Hello");
str_stack.push("World");
std::cout << "Top of integer stack: " << int_stack.top() << std::endl;
std::cout << "Top of string stack: " << str_stack.top() << std::endl;
return 0;
}
阅读全文