📅  最后修改于: 2023-12-03 15:13:45.205000             🧑  作者: Mango
在C++中,模板是一种用于创建通用代码的非常强大的工具。通过使用模板,程序员可以编写与类型无关的代码,以实现代码的重用和通用性。在本篇文章中,我们将介绍C++模板中的问题5。
问题5是关于在C++模板中使用类模板的问题。你需要实现一个包含有限数量元素的固定大小的栈。这个栈必须满足以下要求:
你需要通过实现一个类模板来解决这个问题。你可以使用标准库的 std::array
或者自己实现动态数组来保存栈的元素。
以下是一个示例解决方案的代码片段,用于实现问题5的栈:
template <typename T, int Capacity>
class FixedSizeStack {
private:
std::array<T, Capacity> stack;
int top;
public:
FixedSizeStack() : top(-1) {}
void push(const T& element) {
if (top == Capacity - 1) {
throw std::runtime_error("Stack is full");
}
stack[++top] = element;
}
T pop() {
if (top == -1) {
throw std::runtime_error("Stack is empty");
}
return stack[top--];
}
};
在上面的代码中,我们使用了一个类模板 FixedSizeStack
来实现问题5的栈。模板有两个参数,T
是栈元素的类型,Capacity
是栈的最大容量。
栈的内部使用了 std::array
来保存元素,top
表示栈顶的索引。在构造函数中,我们将 top
初始化为 -1,表示栈为空。
push
函数用于压栈操作。它首先检查栈是否已满,如果满了则抛出异常。否则,它将 top
的值加一,并将元素存储在 stack
中的正确位置。
pop
函数用于弹栈操作。它首先检查栈是否为空,如果是则抛出异常。否则,它将返回栈顶的元素,并将 top
的值减一。
以下是使用示例的代码片段:
int main() {
try {
FixedSizeStack<int, 10> stack;
stack.push(10);
stack.push(20);
stack.push(30);
std::cout << stack.pop() << std::endl; // 输出:30
std::cout << stack.pop() << std::endl; // 输出:20
std::cout << stack.pop() << std::endl; // 输出:10
std::cout << stack.pop() << std::endl; // 抛出异常:Stack is empty
} catch (const std::exception& e) {
std::cout << "Exception: " << e.what() << std::endl;
}
return 0;
}
在上面的使用示例中,我们创建了一个 FixedSizeStack<int, 10>
类型的栈,然后压入了三个整数元素。我们依次弹出栈顶的元素,并进行打印。最后,我们再次尝试弹出元素,此时会抛出一个异常,因为栈已经为空。
通过使用类模板,我们可以轻松地实现通用的数据结构和算法。在本文中,我们介绍了C++模板中的问题5,展示了一个固定大小栈的实现。希望这篇文章能帮助你更好地理解C++模板,并在你的日常编程工作中发挥作用。 Happy coding!