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;  
}
相关推荐
GalaxyPokemon5 分钟前
Muduo网络库实现 [九] - EventLoopThread模块
linux·服务器·c++
W_chuanqi11 分钟前
安装 Microsoft Visual C++ Build Tools
开发语言·c++·microsoft
hyshhhh14 分钟前
【算法岗面试题】深度学习中如何防止过拟合?
网络·人工智能·深度学习·神经网络·算法·计算机视觉
A旧城以西43 分钟前
数据结构(JAVA)单向,双向链表
java·开发语言·数据结构·学习·链表·intellij-idea·idea
无所谓จุ๊บ1 小时前
VTK知识学习(50)- 交互与Widget(一)
学习·vtk
FAREWELL000751 小时前
C#核心学习(七)面向对象--封装(6)C#中的拓展方法与运算符重载: 让代码更“聪明”的魔法
学习·c#·面向对象·运算符重载·oop·拓展方法
tadus_zeng1 小时前
Windows C++ 排查死锁
c++·windows
EverestVIP1 小时前
VS中动态库(外部库)导出与使用
开发语言·c++·windows
杉之1 小时前
选择排序笔记
java·算法·排序算法
吴梓穆1 小时前
UE5学习笔记 FPS游戏制作38 继承标准UI
笔记·学习·ue5