--杂项2--

news2024/12/23 16:43:10

将之前实现的顺序表、栈、队列都更改成模板类

#include <iostream>
#include <string.h>
using namespace std;

template <typename T>
class Stack {
private:
    T* a;
    int top;
    int size1;

public:
    Stack(int c) : a(new T[c]), top(-1), size1(c) {}
    ~Stack() { delete[] a; }

    T front() const {
        if (empty()) {
            throw out_of_range("Stack is empty");
        }
        return a[top];
    }

    T back() const {
        if (empty()) {
            throw out_of_range("Stack is empty");
        }
        return a[0];
    }

    bool empty() const {
        return top == -1;
    }

    int size() const {
        return top + 1;
    }

    void push(const T& e) {
        if (top == size1 - 1) {
            throw overflow_error("Stack is full");
        }
        a[++top] = e;
    }

    void pop() {
        if (empty()) {
            throw underflow_error("Stack underflow");
        }
        --top;
    }

    void Swap(int n, int m) {
        if (n < 1 || n > size() || m < 1 || m > size()) {
            throw out_of_range("Invalid indices for swap");
        }
        swap(a[n-1], a[m-1]);
    }

    void print() const {
        cout << "Stack: ";
        for (int i = top; i >= 0; --i) {
            cout << a[i] << " ";
        }
        cout << std::endl;
    }
};

int main() {
    try {
        Stack<int> s1(15);
        cout << "Is empty: " << (s1.empty() ? "Yes" : "No") << endl;

        s1.push(5);
        s1.push(2);
        s1.push(9);
        s1.push(1);

        s1.print();
        cout << "Size: " << s1.size() << endl;
        cout << "Front: " << s1.front() << endl;
        cout << "Back: " << s1.back() <<endl;

        s1.pop();
        cout << "After pop: ";
        s1.print();

        s1.Swap(1, 3);
        cout << "After swap(1,3): ";
        s1.print();

        // 测试其他类型
        Stack<string> s2(5);
        s2.push("World");
        s2.push("Hello");
        s2.print();
    }
    catch (const exception& e) {
        cerr << "Error: " << e.what() << endl;
    }

    return 0;
}

#include <iostream>
#include <string.h>
using namespace std;
template <typename T>
class Queue {
private:
    T* a;
    int cap;
    int size1;
    int front1;
    int rear;

public:
    Queue(int c) : a(new T[c]), cap(c), size1(0), front1(0), rear(-1) {}
    ~Queue() { delete[] a; }

    T front() const {
        if (empty()) {
            throw out_of_range("Queue is empty");
        }
        return a[front1];
    }

    T back() const {
        if (empty()) {
            throw out_of_range("Queue is empty");
        }
        return a[rear];
    }

    bool empty() const {
        return size1 == 0;
    }

    bool full() const {
        return size1 == cap;
    }

    int size() const {
        return size1;
    }

    void push(const T& e) {
        if (full()) {
            throw std::overflow_error("Queue is full");
        }
        rear = (rear + 1) % cap;
        a[rear] = e;
        size1++;
    }

    T pop() {
        if (empty()) {
            throw std::underflow_error("Queue is empty");
        }
        T e = a[front1];
        front1 = (front1 + 1) % cap;
        size1--;
        return e;
    }

    void print() const {
        if (empty()) {
            cout << "Queue is empty" <<endl;
            return;
        }
        cout << "Queue: ";
        int count = 0;
        int index = front1;
        while (count < size1) {
            cout << a[index] << " ";
            index = (index + 1) % cap;
            count++;
        }
        cout << endl;
    }
};

int main() {
    try {
        Queue<int> q1(5);
        cout << "Is empty: " << (q1.empty() ? "Yes" : "No") <<endl;

        q1.push(5);
        q1.push(2);
        q1.push(9);
        q1.push(1);

        q1.print();
        cout << "Size: " << q1.size() << endl;
        cout << "Front: " << q1.front() << endl;
        cout << "Back: " << q1.back() << endl;

        q1.pop();
        cout << "After pop: ";
        q1.print();

        // 测试其他类型
        Queue<string> q2(3);
        q2.push("Hello");
        q2.push("World");
        q2.print();

        // 测试异常
        q2.push("!");
        try {
            q2.push("Overflow");
        } catch (const std::exception& e) {
            cout << "Caught exception: " << e.what() << endl;
        }
    }
    catch (const std::exception& e) {
        cerr << "Error: " << e.what() << endl;
    }

    return 0;
}

手动将unique_ptr类功能实现出来

template <typename T,typename D=default_delete<T>>
class unique_ptr
{
private:
    T * ptr;
public:
    explicit unique_ptr(T*p=nullptr):ptr(p){}
    ~unique_ptr()noexcept{};
    T& operator *()const{return *ptr;}
    T* operator->()const{return ptr;}
    unique_ptr(const unique_ptr &)=delete;
    unique_ptr& operator=(const unique_ptr &)=delete;
    unique_ptr(unique_ptr && other) noexcept:ptr(other.ptr)
    {
        other.ptr=nullptr;
    }
    unique_ptr& operator =(unique_ptr &&other)noexcept
    {
        if(this!=&other)
        {
            reset(other.ptr);
            other.ptr=nullptr;
        }
        return *this;
    }
    T * get()const{return ptr;}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2172976.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

IDEA 系列产品 下载

准备工作 下载 下载链接&#xff1a;https://www.123865.com/ps/EF7OTd-mbHnH 仅供参考 环境 演示环境&#xff1a; 操作系统&#xff1a;windows10 产品&#xff1a;IntelliJ IDEA 版本&#xff1a;2024.1.2 注意&#xff1a;如果需要其他产品或者版本可以自行下载&#xff0…

ArcEngine C#二次开发图层处理:根据属性分割图层(Split)

需求&#xff1a;仅根据某一属性&#xff0c;分割图层&#xff0c;并以属性值命名图层名称保存。 众所周知&#xff0c;ArcGIS ArcToolbox中通过Split可以实现图形分割一个图层&#xff0c;以属性值命名图层&#xff0c;如下图所示。 本文仅仅依据属性值&#xff0c;将一个shp…

Android界面控件概述

节选自《Android应用开发项目式教程》&#xff0c;机械工业出版社&#xff0c;2024年7月出版 做最简单的安卓入门教程&#xff0c;手把手视频、代码、答疑全配齐 控件是Android界面的重要组成单元&#xff0c;Android应用主要通过控件与用户交互&#xff0c;Android提供了非常…

YUView:YUV查看工具

文章目录 引言安装步骤使用YUView查看YUV数据播放与分析功能亮点注意事项 YUView的架构设计 引言 本文将介绍如何在Ubuntu 20.04上安装YUView&#xff0c;并分享其基本使用方法。 安装步骤 安装依赖项 在开始安装YUView前&#xff0c;先确保安装了所有必需的依赖包。打开终…

VGA/HDMI/DP接口和USB、串口通信协议

1、视频接口 开始之前我们先聊一聊数字信号和模拟信号&#xff0c;模拟信号和数字信号的不同之处在于它们所传输的信息的形式。模拟信号是一个连续的信号&#xff0c;可以以在无限小的时间内进行测量。数字信号则是以离散的形式进行传输&#xff0c;它的数值只能是离散的、有限…

每日一题学习笔记

给你单链表的头结点 head &#xff0c;请你找出并返回链表的中间结点。 如果有两个中间结点&#xff0c;则返回第二个中间结点。 示例 1&#xff1a; 输入&#xff1a;head [1,2,3,4,5] 输出&#xff1a;[3,4,5] 解释&#xff1a;链表只有一个中间结点&#xff0c;提示&…

Unity中的GUIStyle错误:SerializedObject of SerializedProperty has been Disposed.

一运行就循环打印这个报错&#xff0c; 解决办法&#xff0c;每次改参数之后在HIerarchy中手动保存&#xff0c;就会停止循环打印&#xff0c;style中的字体也显示出来了&#xff0c; 或者 直接换个低版本的

如何使用C语言接入Doris数据库

如何使用C语言接入Doris数据库 一、环境准备1. 安装MySQL C API2. Doris数据库环境二、编写C语言接入代码1. 包含必要的头文件2. 编写连接和查询函数3. 编译和运行程序三、注意事项1. 安全性2. 错误处理3. 性能优化4. 兼容性5. 调试和日志记录四、结论Doris(之前称为Palo或Apa…

SQL高可用优化-优化SQL中distinct和Where条件对索引字段进行非空检查语句

最近做一个需求&#xff0c;关于SQL高可用优化&#xff0c;需要优化项目中的SQL&#xff0c;提升查询效率。 SQL高可用优化 一、优化SQL包含distinct场景二、优化SQL中Where条件中索引字段是否为NULL三、代码验证1. NodeMapper2. NodeService3. NodeController4.数据库数据5.项…

《西安交通大学学报》

投稿须知 感谢你对本刊的信任和支持。为了更好地为你服务&#xff0c;保证你的稿件能够顺利通过专家审稿&#xff0c;乃至及时录用发表&#xff0c;现将向本刊投稿时需要注意的事项罗列如下。   &#xff08;1&#xff09;本刊面向国内外公开征稿&#xff0c;校外作者的稿件要…

Linux系统文件的基础IO

目录 一、C语言的文件IO操作 二、系统调用的文件IO操作 1.open打开文件 2.close关闭文件 3.write写入文件 4.read读取文件 三、文件描述符 四、文件描述符的分配规则 五、终端文件 六、C语言中的文件IO对比系统调用文件IO 文件I/O&#xff08;Input/Output&#xff0…

信安 实验2,3 使用Gpg4win进行数字签名、发送加密电子邮件

我发现了有些人喜欢静静看博客不聊天呐&#xff0c; 但是ta会点赞。 这样的人呢帅气低调有内涵&#xff0c; 美丽大方很优雅。 说的就是你&#xff0c; 不用再怀疑哦 实验2 使用Gpg4win进行数字签名 实验目的 通过实验&#xff0c;让学生掌握使用RSA算法实施数字签名的…

【1米C-SAR卫星】

1米C-SAR卫星 1米C-SAR卫星是我国自主研发的重要遥感卫星&#xff0c;主要用于海洋、陆地等观测任务&#xff0c;具备高分辨率、宽覆盖、多极化、多模式等特点。以下是对1米C-SAR卫星的详细介绍&#xff1a; 一、基本概况 发射时间&#xff1a;首颗1米C-SAR卫星于2021年11月2…

谁能给我一个ai现在无法替代画师的理由?

小白可做&#xff01;全自动AI影视解说一键成片剪辑工具https://docs.qq.com/doc/DYnl6d0FLdHp0V2ll 如何看待现如今的AI绘画 哎呀玫瑰花来了&#xff0c;所有花式都要玩完了。 我相信大家在网上已经看过了太多惊为天人的AI绘画作品&#xff0c;有人抵制&#xff0c;有人支持&a…

PMP--二模--解题--141-150

文章目录 14.敏捷--创建敏捷环境--团队构成--混合项目环境&#xff0c;通常是自组织团队&#xff0c;即团队成员自己决定谁做什么&#xff0c;而不是项目经理决定。易混--常见场景--一个新人加入141、 [单选] 在一个混合项目的执行过程中&#xff0c;不得不更换一个开发人员。新…

【爱给网:登录_注册安全分析报告-无验证方式导致安全隐患】

前言 由于网站注册入口容易被黑客攻击&#xff0c;存在如下安全问题&#xff1a; 1. 暴力破解密码&#xff0c;造成用户信息泄露 2. 短信盗刷的安全问题&#xff0c;影响业务及导致用户投诉 3. 带来经济损失&#xff0c;尤其是后付费客户&#xff0c;风险巨大&#xff0c;造…

JS对不同浏览器的检测问题

Navigator对象也称浏览器对象&#xff0c;该对象包含了浏览器的整体信息&#xff0c;如浏览器名称&#xff0c;版本号等。Navigator对象由Navigator浏览器率先使用&#xff0c;后来各方浏览器都开始支持Navigator对象&#xff0c;逐步成为一种标准。 一、Navigator对象的属性 …

检查索引对象中是否存在缺失值pandas.Index.hasnans

【小白从小学Python、C、Java】 【考研初试复试毕业设计】 【Python基础AI数据分析】 检查索引对象中是否存在缺失值 pandas.Index.hasnans [太阳]选择题 题目代码中执行结果是&#xff1f; import pandas as pd import numpy as np idx1 pd.Index([1, 2, np.nan, 4]) print…

破局证券公司结算业务系统信创国产化建设难点,探索实现路径与策略

数字化和国产化是金融IT行业目前的两大趋势。在金融行业&#xff0c;除了数字化以外&#xff0c;国产化也是核心趋势。信创建设从政府办公电脑开始&#xff0c;目的是借助政府的力量培养自主可控生态&#xff0c;而真正的繁荣还要靠行业大客户的支持&#xff0c;其中金融行业是…

spring揭秘24-springmvc02-5个重要组件

文章目录 【README】【1】HanderMapping-处理器映射容器【1.1】HanderMapping实现类【1.1.1】SimpleUrlHandlerMapping 【2】Controller&#xff08;二级控制器&#xff09;【2.1】AbstractController抽象控制器&#xff08;控制器基类&#xff09; 【3】ModelAndView(模型与视…