C++ 标准库中的 stack
容器适配器并没有直接提供限制栈大小的功能。stack
是一个后进先出(LIFO)的数据结构,通常只提供了基本的 push
、pop
和 top
操作。
如果你需要限制栈的大小,你可以使用 std::vector
或 std::deque
作为底层容器,并在每次 push
操作时检查栈的大小是否超过了限制。如果超过了限制,你可以选择不执行 push
操作或者移除栈顶元素以满足大小限制。
下面是一个使用 std::vector
作为底层容器并限制栈大小的示例:
#include <iostream>
#include <vector>
template<typename T, size_t MaxSize>
class LimitedStack {
public:
void push(const T& value) {
if (size() < MaxSize) {
data.push_back(value);
} else {
std::cout << "Stack overflow! Cannot push " << value << std::endl;
}
}
T pop() {
if (!empty()) {
T topValue = data.back();
data.pop_back();
return topValue;
} else {
std::cout << "Stack underflow! Cannot pop" << std::endl;
throw std::runtime_error("Stack underflow");
}
}
T top() const {
if (!empty()) {
return data.back();
} else {
std::cout << "Stack is empty! Cannot get top element" << std::endl;
throw std::runtime_error("Stack is empty");
}
}
bool empty() const {
return data.empty();
}
size_t size() const {
return data.size();
}
private:
std::vector<T> data;
static constexpr size_t MaxSize = MaxSize;
};
int main() {
LimitedStack<int, 5> stack;
for (int i = 0; i < 10; ++i) {
stack.push(i);
}
return 0;
}
在这个示例中,我们定义了一个 LimitedStack
类,它使用 std::vector
作为底层容器,并提供了一个静态常量 MaxSize
用于限制栈的大小。当尝试 push
一个元素时,如果栈的大小已经达到 MaxSize
,则会输出错误信息并跳过 push
操作。