阅读量:0
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
操作。