C++杂项

news2024/11/16 21:56:47

作业:

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

顺序表

#include <iostream>

using namespace std;

template<typename T>

class SeqList
{
private:
    T *ptr;
    int size;             //总长度
    int len = 0;          //当前顺序表实际长度

public:
    //初始化
    void init(int n)
    {
        this->ptr = new T[n];
        this->len = 0;
        this->size = n;
    }

    //判空
    bool empty()
    {
        return this->len == 0;
    }
    //判满
    bool full()
    {
        return this->len == this->size;
    }
    //尾插
    void push_back(T e)
    {
        //判断是否满了
        if(this->full())
        {
            return ;
        }

        this->ptr[len++] = e;
    }
    //插入
    void insert(T index)
    {
        //判断是否满了
        if(this->full())
        {
            return ;
        }
        int i,pos;
        cout << "pos>>";
        cin >> pos;
        for(i=this->len; i>=pos; i--)
        {
            this->ptr[i] = this->ptr[i-1];
        }
        this->ptr[i] = index;
        this->len++;
    }
    //任意位置删除
    void del(int index)
    {
        if(empty() == 1)
        {
            return;
        }
        int i;
        for(i = index - 1; i < this->len; i++)
        {
            this->ptr[i] = this->ptr[i+1];
        }
        this->len--;
    }
    //尾删
    void pop_back(int index)
    {
        if(empty() == 1)
        {
            return;
        }
        int i;
        for(i = 0; i < index; i++)
        {
            this->ptr[this->len--] = 0;
        }
    }
    //求长度
    void my_size()
    {
        cout << "len = " << this->len <<endl;
    }
    //获取任意位置元素
    T & at(int index)
    {
        static T num;
        num = this->ptr[index-1];
        return num;
    }
    //将顺序表进行排序
    void sort(bool flag)
    {
        int i,j;
        if(flag)
        {
            for(i = 0; i < this->len; i++)
            {
                for(j = 0; j < this->len - 1- i;j++)
                {
                    if(this->ptr[j]>this->ptr[j+1])
                    {
                        T temp = this->ptr[j];
                        this->ptr[j] = this->ptr[j+1];
                        this->ptr[j+1] = temp;
                    }
                }
            }
        }
        else
        {
            for(i = 0; i < this->len; i++)
            {
                for(j = 0; j < this->len - 1- i;j++)
                {
                    if(this->ptr[j]<this->ptr[j+1])
                    {
                        T temp = this->ptr[j];
                        this->ptr[j] = this->ptr[j+1];
                        this->ptr[j+1] = temp;
                    }
                }
            }
        }
    }
    //定义展示函数
    void show()
    {
        //判空
        if(empty() == 1)
        {
            return;
        }
        for(int i=0; i<this->len; i++)
        {
            cout<<this->ptr[i]<<" ";
        }
        cout<<endl;
    }
};
int main()
{
    SeqList<int> s1;           //实例化一个顺序表对象
    s1.init(10);
    s1.show();
    s1.insert(8);
    s1.insert(7);
    s1.insert(9);
    s1.insert(2);
    s1.show();
    cout<<s1.at(2)<<endl;
    s1.del(1);
    s1.show();
    return 0;
}

运行结果:

#include <iostream>

using namespace std;

template<typename T>
class Stack  //定义一个栈的模板类
{
private:
    T *ptr;   //栈
    int num;  //栈顶元素数
    int max;  //栈的空间初始大小
public:
    Stack():num(-1),max(20){
        ptr = new T[max];   //申请空间
    }
    Stack(int t,int m):num(t),max(m){
        ptr = new T[max];   //申请栈空间
        for(int i=0;i<num+1;i++)
        {
            cout<<"input>>";
            cin>>ptr[i];
        }
    }
    ~Stack(){
        delete [] ptr;
    }
    Stack(Stack &s):ptr(new T(*s.ptr)),num(s.num),max(s.max){}
    //栈顶元素访问
    T top()
    {
        return ptr[num];
    }
    //判空
    bool empty()
    {
        return num==-1;
    }
    //元素数
    int size()
    {
        return num+1;
    }
    //向栈顶插入元素
    void push(T n)
    {
        //判满
        if(num==max-1)
        {
            cout<<"full"<<endl;
            return;
        }
        ++this->num;
        this->ptr[num] = n;
    }
    //删除栈顶元素
    void pop()
    {
        //判空
        if(empty())
        {
            return;
        }
        this->num--;
    }
    void show()
    {
        for(int i=0;i<num+1;i++)
        {
            cout<<ptr[i]<<"  ";
        }
        cout<<endl;
    }
};
int main()
{
    Stack <string> s1(4,10);   //有参构造
    s1.show();
    s1.pop();
    s1.show();

    string buff;
    cout<<"push>>";
    cin>>buff;
    s1.push(buff);
    s1.show();
    cout<<s1.size()<<"  "<<s1.top()<<endl;
    return 0;
}

运行结果:

队列

#include <iostream>
#include <stack>
using namespace std;
//队列模板类
template<typename T>
class Queue
{
private:
    int max;      //队列最大容量
    int num;      //队列内元素数
    T *ptr;     //容器
public:
    Queue():max(20),num(0){
        ptr = new T[this->max];
    }
    ~Queue(){
        delete [] ptr;           //释放空间
    }
    Queue(Queue &q):max(q.max),num(q.num),ptr(new T(*q.ptr)){}    //深拷贝
   T front()
   {
       if(empty())
       {
           cout<<"null"<<endl;
           T a;
           return a;
       }
       return ptr[0];
   }
   T back()
   {
       if(empty())
       {
           cout<<"null"<<endl;
           T a;
           return a;
       }
       return ptr[num-1];
   }
   bool empty()
   {
       return num==0;
   }
   int size()
   {
       return num;
   }
   void push(T n)
   {
       //判满
       if(num>=max)
       {
           cout<<"full"<<endl;
           return;
       }
       this->num++;
       this->ptr[num-1] = n;
   }
   void pop()
   {
       //判空
       if(empty())
       {
           cout<<"null"<<endl;
           return;
       }
       for(int i=0;i<this->num;i++)
       {
           this->ptr[i]=this->ptr[i+1];
       }
       this->num--;
   }
   void show()
   {
       for(int i=0;i<num;i++)
       {
           cout<<ptr[i]<<"  ";
       }
       cout<<endl;
   }
};
int main()
{
    Queue<string> q;
    //判空
    if(q.empty())
    {
        q.push("hello");
        q.push("world");
        q.push("I");
        q.push("love");
        q.push("china");
        q.show();
    }
    cout<<q.back()<<endl;
    cout<<q.front()<<endl;
    cout<<q.size()<<endl;
    q.pop();
    q.show();
    return 0;
}

运行结果:

知识梳理:

C++11新特性之智能指针(重要)

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

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

相关文章

【笔记】X射线物理基础

一、X射线衍射分析简史 1895年X射线发现 1896 年 2 月对骨折的观察&#xff1a;G.和 E. Frost是第一个使用 X 射线进行医疗用途 1897 年法国海关官员的行李扫描。 X射线衍射理论1 X射线衍射理论2 元素的特征X射线 X射线光电子的应用 电磁波的粒子属性 X射线层析成像法 X-ray…

《CARAT: Contrastive Feature Reconstruction and Aggregation...》中文校对版

系列论文研读目录 例如&#xff1a; 文章目录 系列论文研读目录摘要引言相关作品方法论问题定义单模态标签特征提取基于对比重建的融合 基于Shuffle的特征聚合实验实验设置实验结果 分析结论 摘要 多模态多标签情感识别&#xff08;Multi-modal multi-label emotion recognit…

windows10使用bat脚本安装前后端环境之redis注册服务

首先需要搞清楚redis在本地是怎么安装配置、然后在根据如下步骤编写bat脚本&#xff1a; 思路 1.下载zip格式redis 2.查看windows server服务是否已安装redis 3.启动查看服务是否正常 bat脚本 echo off echo windows10 x64 server redis init REM 请求管理员权限并隐藏窗口 …

Total Blocking Time指标

Total Blocking Time 总阻塞时间 (TBT) 是一项用于衡量加载响应能力的重要实验指标&#xff0c;因为它有助于量化网页在变为可靠交互之前处于非交互状态的严重程度。 TBT&#xff08;Total Blocking Time&#xff09;&#xff0c;阻塞总时间&#xff0c;记录在 FCP 到 TTI 之间…

大厂太卷了!又一款一站式AI短剧创作神器,这套AI工作流厉害了:自动生成脚本、角色、分镜、视频、音乐、字幕...(附保姆级教程)

大家好&#xff0c;我是程序员X小鹿&#xff0c;前互联网大厂程序员&#xff0c;自由职业2年&#xff0c;也一名 AIGC 爱好者&#xff0c;持续分享更多前沿的「AI 工具」和「AI副业玩法」&#xff0c;欢迎一起交流~ 行业在卷 AI 应用&#xff0c;而美图已经在卷 AI 工作流了………

每日一题|2516. 每种字符至少取 K 个|双指针、最长子串、字典

本题需要转化求解目标。 对于一个序列&#xff0c;两头收集的最少数量的时候&#xff0c;剩下的部分&#xff08;我们称之为子串&#xff09;就会对应的越长。也就是说&#xff0c;我们只要求解一个满足要求的最长子串&#xff0c;使得两边剩余的字符数量刚好满足要求。 由于…

学习threejs,实现几何体阴影效果

&#x1f468;‍⚕️ 主页&#xff1a; gis分享者 &#x1f468;‍⚕️ 感谢各位大佬 点赞&#x1f44d; 收藏⭐ 留言&#x1f4dd; 加关注✅! &#x1f468;‍⚕️ 收录于专栏&#xff1a;threejs gis工程师 文章目录 一、&#x1f340;前言二、&#x1f340;绘制任意字体模型…

量化交易backtrader实践(三)_指标与策略篇(1)_指标简介与手工双均线策略

01_指标 指标是一个汉语词语&#xff0c;读音是zhǐ biāo&#xff0c;意思是衡量目标的参数&#xff1b;预期中打算达到的指数、规格、标准&#xff0c;一般用数据表示。 统计学术语 指标是说明总体数量特征的概念及其数值的综合&#xff0c;故又称为综合指标。在实际的统计…

使用ESPnet的 setup_anaconda.sh安装脚本一步到位,配置conda虚拟环境

使用ESPnet的 setup_anaconda.sh安装脚本一步到位&#xff0c;配置conda虚拟环境 前言 ESPnet&#xff08;End-to-End Speech Processing Toolkit&#xff09;是一款用于语音识别、语音合成等任务的开源端到端语音处理工具包。为了在不同系统上快速配置ESPnet开发环境&#x…

Serverless and Go

本篇内容是根据2019年8月份Serverless and Go音频录制内容的整理与翻译, Johnny、Mat、Jaana 和特邀嘉宾 Stevenson Jean-Pierre 讨论了 Go 世界中的Serverless。什么是Serverless&#xff0c;Serverless适用于哪些用例&#xff0c;有哪些权衡&#xff0c;以及如何在Serverles…

AI芯片WT2605C赋能厨房家电,在线对话操控,引领智能烹饪新体验:尽享高效便捷生活

在智能家居的蓬勃发展中&#xff0c;智能厨电作为连接科技与生活的桥梁&#xff0c;正逐步渗透到每一个现代家庭的厨房中。蒸烤箱作为智能厨电的代表&#xff0c;以其丰富的功能和高效的性能&#xff0c;满足了人们对美食的多样化追求。然而&#xff0c;面对众多复杂的操作功能…

每日OJ_牛客_OR59字符串中找出连续最长的数字串_双指针_C++_Java

目录 牛客_OR59字符串中找出连续最长的数字串 题目解析 C代码1 C代码2 C代码3 Java代码 牛客_OR59字符串中找出连续最长的数字串 字符串中找出连续最长的数字串_牛客题霸_牛客网 题目解析 双指针&#xff1a; 遍历整个字符串&#xff0c;遇到数字的时候&#xff0c;用双…

字符编码发展史4 — Unicode与UTF-8

上一篇《字符编码发展史3 — GB2312/Big5/GBK/GB18030》我们讲解了ANSI编码中的GB2312/Big5/GBK/GB18030。本篇我们将继续讲解字符编码的第三个发展阶段中的Unicode与UTF-8。 2.3. 第三个阶段 国际化 前面提到的第二个阶段&#xff0c;各个国家和地区各自为政&#xff0c;纷纷…

并发编程---线程与进程

业务场景&#xff1a;小明去理发店理发。 小明去理发店理发&#xff0c;完成理发需要吹&#xff0c;剪&#xff0c;洗、理的过程。由这个场景我们引用进程和线程这两个 概念。 一.进程 1.什么是进程 进程是具有独立功能的程序关于某个数据集合上的一次运行活动&#xff0c;是…

【docker】debian中配置docker(2024年9月)

首先Follow了一下菜鸟教程&#xff0c;然后遇到了curl的问题。 curl存在的问题 参见这篇文章。其中用到了vim进行编辑&#xff0c;笔者的环境是windows10putty&#xff0c;vim的粘贴操作参考这篇文章。 修改之后的curl没有问题了&#xff0c;成功把脚本下载下来了。 但是在…

LD2 Scalable Heterophilous Graph Neural Network with Decoupled Embeddings

Neurips 24 推荐指数&#xff1a; #paper/⭐⭐⭐ 领域&#xff1a;可扩展图&#xff0c;大图加速 整个文章的理论部分比较多&#xff0c;尽量尽我所能避开一些额外公式。详细文章&#xff0c;见链接 模型架构 如图&#xff0c;整个模型分为与计算和训练两部分。本文的精华在于…

Docker网络、数据卷及安全优化

目录 一、Docker网络 1、原生bridge网络 2、host网络 3、none网络 4、docker自定义桥接网络 1、Docker自定义网络 2、不同自定义网络通信 3、joined容器网络 5、Docker容器内外网访问 1、容器访问外网 2、外网访问容器 6、macvlan网络实现跨主机通信 二、Docker数据…

Ubuntu下Kafka安装及使用

Kafka是由Apache软件基金会开发的一个开源流处理平台&#xff0c;同时也是一个高吞吐量的分布式发布订阅消息系统。它由Scala和Java编写&#xff0c;具有多种特性和广泛的应用场景。 Kafka是一个分布式消息系统&#xff0c;它允许生产者&#xff08;Producer&#xff09;发布消…

Spring Ioc底层原理代码详细解释

文章目录 概要根据需求编写XML文件&#xff0c;配置需要创建的bean编写程序读取XML文件&#xff0c;获取bean相关信息&#xff0c;类&#xff0c;属性&#xff0c;id前提知识点Dom4j根据第二步获取到的信息&#xff0c;结合反射机制动态创建对象&#xff0c;同时完成属性赋值将…

【移植】标准系统方案之扬帆移植案例

往期知识点记录&#xff1a; 鸿蒙&#xff08;HarmonyOS&#xff09;应用层开发&#xff08;北向&#xff09;知识点汇总 鸿蒙&#xff08;OpenHarmony&#xff09;南向开发保姆级知识点汇总~ 持续更新中…… 本文章是基于瑞芯微RK3399芯片的yangfan开发板&#xff0c;进行标准…