C++学习 2024.9.4

用模板封装栈,并且栈内可存放任意数据类型

cpp 复制代码
#include <iostream>  
#include <vector>  
  
using namespace std;  
  
template <typename T>  
class Stack {  
private:  
    vector<T> stack;  // 使用vector存储元素,T是模板参数,表示元素的类型  
  
public:  
    // 默认构造  
    Stack() = default;  
  
    // 判空  
    bool empty() const {  
        return stack.empty();  
    }  
  
    // 入栈  
    void push(const T& element) {  
        stack.push_back(element);  
    }  
  
    // 出栈  
    void pop() {  
        if (empty()) {  
            cout << "栈为空,出栈失败" << endl;  
        } else {  
            stack.pop_back();  
        }  
    }  
  
    // 栈内元素个数  
    size_t size() const {  
        return stack.size();  
    }  
  
    // 访问栈顶元素  
    T top() const {  
        if (!empty()) {  
            return stack.back();  
        } else {  
            throw runtime_error("栈为空,无法访问栈顶元素");  
        }  
    }  
  
    // 展示函数  
    void show() const {  
        cout << "栈内元素为: ";  
        for (const T& elem : stack) {  
            cout << elem << " ";  
        }  
        cout << endl;  
    }  
};  
  
int main() {  
    // 创建一个存放整数的栈  
    Stack<int> intStack;  
    intStack.push(5);  
    intStack.push(2);  
    intStack.push(0);  
    intStack.show();             // 输出: 栈内元素为: 5 2 0  
    cout << "栈顶元素为: " << intStack.top() << endl;  
  
    // 创建一个存放字符串的栈  
    Stack<string> stringStack;  
    stringStack.push("Hello");  
    stringStack.push("World");  
    stringStack.show();          // 输出: 栈内元素为: Hello World  
    cout << "栈顶元素为: " << stringStack.top() << endl;  
  
    // 其他操作...  
      
    return 0;  
}

同样的形式封装队列

cpp 复制代码
#include <iostream>  
#include <vector>  
  
template <typename T>  
class Queue  
{  
private:  
    std::vector<T> queue;  // 使用vector作为底层存储,存储任意类型T  
  
public:  
    // 默认构造  
    Queue() = default;  
  
    // 判空  
    bool empty() const  
    {  
        return queue.empty();  
    }  
  
    // 访问队头元素  
    void at_front() const  
    {  
        if (empty())  
        {  
            std::cout << "队列为空" << std::endl;  
        }  
        else  
        {  
            std::cout << "队头元素为:" << queue.front() << std::endl;  
        }  
    }  
  
    // 访问队尾元素  
    void at_last() const  
    {  
        if (empty())  
        {  
            std::cout << "队列为空" << std::endl;  
        }  
        else  
        {  
            std::cout << "队尾元素为:" << queue.back() << std::endl;  
        }  
    }  
  
    // 队列中元素个数  
    size_t size() const  
    {  
        return queue.size();  
    }  
  
    // 向队尾插入元素  
    void push_in(const T& e)  
    {  
        queue.push_back(e);  
    }  
  
    // 删除首个元素  
    void pop()  
    {  
        if (empty())  
        {  
            std::cout << "队列为空" << std::endl;  
        }  
        else  
        {  
            queue.erase(queue.begin());  
        }  
    }  
  
    // 展示函数  
    void show() const  
    {  
        if (empty())  
        {  
            std::cout << "队列为空" << std::endl;  
        }  
        else  
        {  
            std::cout << "队列中元素为:";  
            for (const T& elem : queue)  
            {  
                std::cout << " " << elem;  
            }  
            std::cout << std::endl;  
        }  
    }  
};  
  
int main()  
{  
    // 创建一个存储整数的队列  
    Queue<int> intQueue;  
    intQueue.push_in(1);  
    intQueue.push_in(3);  
    intQueue.push_in(1);  
    intQueue.push_in(4);  
    intQueue.show();       // 1 3 1 4  
    std::cout << "队列中元素个数为:" << intQueue.size() << std::endl;   // 4  
    intQueue.pop();  
    std::cout << "执行一次pop函数后" << std::endl;  
    intQueue.show();  // 3 1 4  
    intQueue.at_front();  
    intQueue.at_last();    // 访问队尾元素应显示4  
  
    // 创建一个存储字符串的队列  
    Queue<std::string> stringQueue;  
    stringQueue.push_in("hello");  
    stringQueue.push_in("world");  
    stringQueue.show();       // hello world  
    stringQueue.at_front();   // 队头元素为: hello  
    stringQueue.at_last();    // 队尾元素为: world  
  
    return 0;  
}
相关推荐
优思学院26 分钟前
优思学院|如何从零开始自己学习六西格玛?
大数据·运维·服务器·学习·六西格玛黑带·cssbb
weixin_4866811436 分钟前
C++系列-STL容器中统计算法count, count_if
开发语言·c++·算法
基德爆肝c语言36 分钟前
C++入门
开发语言·c++
LN花开富贵42 分钟前
stm32g431rbt6芯片中VREF+是什么?在电路中怎么设计?
笔记·stm32·单片机·嵌入式硬件·学习
怀九日42 分钟前
C++(学习)2024.9.18
开发语言·c++·学习·面向对象·引用·
一道秘制的小菜43 分钟前
C++第七节课 运算符重载
服务器·开发语言·c++·学习·算法
极术社区1 小时前
ResNeXt学习
开发语言·学习·计算机视觉·php
代码小狗Codog2 小时前
C++独立开发开源大数计算库 CBigNum
数据结构·c++
咕噜咕嘟嘟嘟2 小时前
343. 整数拆分
数据结构·算法
WenGyyyL2 小时前
力扣最热一百题——二叉树的直径
java·c++·算法·二叉树·深度优先