模板类的示例-栈

 下面是一个使用模板类实现的简单栈(Stack)的示例。这个栈类支持基本操作,如入栈(push)、出栈(pop)、查看栈顶元素(top)和检查栈是否为空(isEmpty)。我将在类模板中定义这些方法,并展示如何在主函数中使用该模板类。

#include <iostream>
#include <vector>
#include <stdexcept>  // For std::out_of_range

template<typename T>
class Stack {
private:
    std::vector<T> elements;

public:
    // 将元素压入栈顶
    void push(const T& elem) {
        elements.push_back(elem);
    }

    // 弹出栈顶元素
    void pop() {
        if (elements.empty()) {
            throw std::out_of_range("Stack<>::pop(): empty stack");
        }
        elements.pop_back();
    }

    // 返回栈顶元素
    T top() const {
        if (elements.empty()) {
            throw std::out_of_range("Stack<>::top(): empty stack");
        }
        return elements.back();
    }

    // 检查栈是否为空
    bool isEmpty() const {
        return elements.empty();
    }
};

int main() {
    Stack<int> intStack;  // 整型栈
    Stack<std::string> stringStack;  // 字符串栈

    // 操作整型栈
    intStack.push(7);
    intStack.push(13);
    std::cout << "Top element of intStack: " << intStack.top() << std::endl;
    intStack.pop();
    std::cout << "Top element of intStack after pop: " << intStack.top() << std::endl;

    // 操作字符串栈
    stringStack.push("Hello");
    stringStack.push("World");
    std::cout << "Top element of stringStack: " << stringStack.top() << std::endl;
    stringStack.pop();
    std::cout << "Top element of stringStack after pop: " << stringStack.top() << std::endl;

    return 0;
}

代码解释:

  1. 模板类定义Stack是一个模板类,其类型参数为T。它使用std::vector<T>来存储栈的元素。这使得它能够存储任何类型的数据,并动态地管理内存。

  2. 成员函数

    • push(const T& elem):在栈顶添加一个新元素。
    • pop():移除栈顶元素。如果栈为空,则抛出std::out_of_range异常。
    • top():返回栈顶元素的值。如果栈为空,也抛出异常。
    • isEmpty():返回一个布尔值,表示栈是否为空。
  3. 主函数中的使用

    • 创建两个栈的实例:一个用于整数,另一个用于字符串。
    • 对每个栈进行一系列操作,演示如何添加、移除和访问元素。

这个栈的实现利用了C++模板的灵活性,使得同一个栈类可以用于任何类型的数据。另外,它也展示了异常处理的使用,确保在尝试从空栈中弹出或获取元素时能够安全地报告错误。

  • 6
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值