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
操作。