C++: day7

news2025/6/2 8:50:53

1.简单实现部分vector

#include <iostream>

using namespace std;

template <typename T>
class My_vector
{
private:
    T * first;      //指向第一个元素
    T * last;       //指向最后一个元素
    T * end;        //指向容器末尾

public:
    //构造函数
    My_vector()
    {
        first = last = end = nullptr;
    }
    My_vector(int size = 8)     //默认初始大小为8
    {
        first = new T[size];    //堆区申请空间
        last = first;           //初始为空
        end = first + size;     //容器末尾指针
    }

    //析构函数
    ~My_vector()
    {
        delete []first;                     //释放堆区空间
        first = last = end = nullptr;       //指针指向空
    }

    //拷贝构造
    My_vector(const My_vector &other)
    {
        int size = other.end - other.first;                     //原始容器大小
        this->first = new T[size];                              //创建新容器
        this->end = this->first + size;                         //定位新end指针
        this->last = this->first + (other.last - other.first);  //定位新last指针
    }

    //拷贝赋值
    My_vector &operator=(const My_vector &other)
    {
        delete []this->first;                                   //删除原始空间
        int size = other.end - other.first;                     //原始容器大小
        this->first = new T[size];                              //创建新容器
        this->end = this->first + size;                         //定位新end指针
        this->last = this->first + (other.last - other.first);  //定位新last指针

        return *this;
    }

    //按位查找
    T at(int n)
    {
        return this->first[n];
    }

    //判空函数
    bool empty()
    {
        return this->first == this->last;
    }

    //判满函数
    bool full()
    {
        return this->last == this->end;
    }

    //获取第一个元素
    T &front()
    {
        return *first;
    }

    //获取最后一个元素
    T &back()
    {
        return *(last-1);
    }

    //获取数据长度
    int size()
    {
        return last-first;
    }

    //清空元素,容量不变
    void clear()
    {
        last = first;
    }

    //二倍扩容
    void expand()
    {
        int size = this->end - this->first;     //获取容量

        T *temp = new T[2*size];        //两倍容量的空间

        memcpy(temp, this->first, size*sizeof (T));     //原始数据拷贝

        delete []first;     //释放原空间

        first = temp;      //指针指向新空间
        last = first + size;
        end = first + 2*size;
    }

    //实现尾插
        void push_back( const T val)
        {
            if(this->full())
            {
                this->expand();        //满了进行扩容
            }

            *last = val;
            last++;
        }

        //实现尾删
        void pop_back()
        {
            if(this->empty())
            {
                return;
            }

            --last;
        }
};

int main()
{
    My_vector<int> v1(12);              //调用无参构造,数据元素类型为int类型


    //判断当前数组是否为空
    if(v1.empty())
    {
        cout<<"v1 is empty"<<endl;
    }else
    {
        cout<<"v1 is not empty"<<endl;
    }


    //输出当前的数组容器的大小
    cout<<"v1.size = "<<v1.size()<<endl;


    //向容器中放入数据
    for(int i=0; i<20; i++)
    {
        v1.push_back(520+i);           //向末尾放入一个值
        cout<<"v1.size = "<<v1.size()<< endl;
    }


    //遍历所有元素
    for(int i=0; i<v1.size(); i++)
    {
        cout<<v1.at(i)<<" ";
    }
    cout<<endl;


    //删除最后一个元素
    v1.pop_back();
    for(int i=0; i<v1.size(); i++)
    {
        cout<<v1.at(i)<<" ";
    }
    cout<<endl;


    //第一个元素和最后一个元素
    v1.front() = 0;
    v1.back() = 99999;
    for(int i=0; i<v1.size(); i++)
    {
        cout<<v1.at(i)<<" ";
    }
    cout<<endl;


    //清空容器
    v1.clear();
    cout<<"v1.size = "<<v1.size()<<endl;


    return 0;
}

2.思维导图

 

 

 

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

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

相关文章

通识测试08

正交试验法 正交实验助手&#xff08;工具&#xff09; 正交原理介绍 一、正交实验法&#xff0c;统计学家提出 2.使用工具&#xff1a;正交表 3. 统计和分析实验数据&#xff0c;从大量实验中找到合适的实验数据组合。 4. 大量实验中挑选一部分具有代表性的点。进行实验&…

三星李在镕亲会马斯克,低价拿下特斯拉HW5.0芯片订单

作者|Amy 编辑|德新 提到特斯拉&#xff0c;第一印象往往是「美国新晋新能源汽车巨头」。实际上特斯拉的芯片设计也是走在行业前列的。 2016年&#xff0c;特斯拉挖来了传奇芯片大师Jim Keller&#xff0c;搭建了由Pete Bannon等大牛组建的芯片研发团队。其自研的HW3.0&#…

钉钉和金蝶云星空接口打通对接实战

钉钉和金蝶云星空接口打通对接实战 对接系统&#xff1a;钉钉 钉钉是阿里巴巴集团打造的企业级智能移动办公平台&#xff0c;是数字经济时代的企业组织协同办公和应用开发平台。钉钉将IM即时沟通、钉钉文档、钉闪会、钉盘、Teambition、OA审批、智能人事、钉工牌、工作台深度整…

夯实数字化转型安全地基,华东某农商行开源安全治理经验

华东某农村商业银行是一家全国首批组建的股份制农村金融机构。近年来&#xff0c;该农商行坚持“科技强行”战略&#xff0c;进一步夯实数字化核心基础&#xff0c;积极推动金融科技与产品、服务的深度融合&#xff0c;努力拓展数字金融的包容性&#xff0c;让数字金融更有温度…

音频降噪之人声分离

音频降噪 Ultimate Vocal Remover GUI v5.5.1工具使用 1&#xff1a;是什么 集成目前最先进的从音频文件中分离人声的源分离模型。 本工程&#xff0c;将Ultimate Vocal Remover GUI v5.5.1界面工具&#xff0c;改写成可以在服务器端批量推理的工具。 界面仓库地址&#xff…

【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B:美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析

2023 年第二届钉钉杯大学生大数据挑战赛 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题三时间序列预测Python代码分析 相关链接 【2023 年第二届钉钉杯大学生大数据挑战赛】 初赛 B&#xff1a;美国纽约公共自行车使用量预测分析 问题一Python代码分析 【2023 年…

Jetson Orin Nano 平台适配IMX715 camera驱动调试记录

1. 前言 Jetson Orin Nano Devkit适配imx715 camera 使用argus_camera捕获流,图片是黑色的 用示波器来测量mipi信号,信号正常 Jetpack版本: sensor参数: dts配置 i2c@1 { sw_mipi_cam1: cam_1@1a { compatible = “sensing,imx715_1”; /* I2C device address */ reg =…

2.4G无线遥控开关插座方案开发

在日常生活和工业生产中&#xff0c;无线遥控开关常用于控制门闸、卷帘门窗、水泵电机等场景。宇凡微推出的免布线遥控开关方案基于2.4G合封芯片设计开发&#xff0c;遥控插座芯片提供了信号接收端按键编码设定、继电器控制、状态显示等功能。 一、遥控开关方案介绍 无线遥控开…

ChatGPT付费创作系统小程序端开发工具提示打开显示无法打开页面解决办法

很多会员在上传小程序前端时经常出现首页无法打开的情况&#xff0c;错误提示无法打开该页面&#xff0c;不支持打开&#xff0c;这种问题其实就是权限问题&#xff0c;页面是通过调用web-view访问&#xff0c;说明业务域名有问题&#xff0c;很多都是合法域名加了&#xff0c;…

阿里云Maven仓库文件

apache snapshots → https://maven.aliyun.com/repository/apache-snapshots central → https://maven.aliyun.com/repository/central google → https://maven.aliyun.com/repository/google gradle-plugin → https://maven.aliyun.com/repository/gradle-plugin jcenter …

SpringBoot + Vue前后端分离项目实战 || 六:Jwt加密整合配置

文章目录 回顾添加依赖Jwt依赖Jwt配置定义Jwt拦截器注册Jwt拦截器&#xff0c;配置需要验证token的URL 测试Jwt修改登录等逻辑 回顾 在之前的系统中&#xff0c;我们利用UUID配合Redis以达到角色登录的功能。 当前整个系统存在一个问题&#xff1a;人为修改token值后&#xf…

ItemsControl的常见用法

ItemsControl基本概念 用法1&#xff1a;设置奇偶行不同 <ItemsControl AlternationCount"2" ItemsSource"{Binding Stars}"><ItemsControl.Template><ControlTemplate TargetType"ItemsControl"><DockPanel><TextB…

探秘MySQL底层架构:设计与实现流 程一览

点赞还是要求一下的&#xff0c;万一屏幕前的大漂亮&#xff0c;还有大帅哥就点赞了呢&#xff01;&#xff01;&#xff01;&#xff01; Author: 源码时代 Raymon老师 说在前头 Mysql&#xff0c;作为一款优秀而广泛使用的数据库管理系统&#xff0c;对于众多Java工程师来…

【NLP】图解变压器(transformer)

一、说明 在这篇文章中&#xff0c;我们将看看 The Transformer——一个利用注意力来提高这些模型训练速度的模型。转换器在特定任务中优于谷歌神经机器翻译模型。然而&#xff0c;最大的好处来自变压器如何适应并行化。事实上&#xff0c;谷歌云建议使用The Transformer作为参…

C语言第八课-----函数定义和使用的延续

作者前言 个人主页::小小页面 gitee页面:秦大大 一个爱分享的小博主 欢迎小可爱们前来借鉴 __________________________________________________________ 目录 1.复习 库函数 自定义函数 函数参数 函数调用 函数的嵌套调用和链式访问 2. 函…

SQL-每日一题【601.体育馆的人流量】

题目 表&#xff1a;Stadium 编写一个 SQL 查询以找出每行的人数大于或等于 100 且 id 连续的三行或更多行记录。 返回按 visit_date 升序排列 的结果表。 查询结果格式如下所示。 示例 1: 解题思路 前置知识 自然连接 自连接可以理解为自己连接自己&#xff0c;在一张表上…

【JAVASE】初识JAVA语言

⭐ 作者&#xff1a;小胡_不糊涂 &#x1f331; 作者主页&#xff1a;小胡_不糊涂的个人主页 &#x1f4c0; 收录专栏&#xff1a;浅谈Java &#x1f496; 持续更文&#xff0c;关注博主少走弯路&#xff0c;谢谢大家支持 &#x1f496; 初识JAVA 1. Java语言概述1.1 Java是什么…

5月PMP成绩开始公布,你收到邮件了吗?

出&#xff01;成&#xff01;绩&#xff01;啦&#xff01; 分数公布啦&#xff01; 你&#xff01; 收到通过邮件了吗&#xff01; 等了好久终于等到今天&#xff01;心心念念的PMP考试成绩今天终于公布了&#xff01;凌晨五点开始就陆续听到了不少学员通过认证考试的消息…

模型构建——使用逻辑回归构建模型,lightGBM进行特征筛选

1、模型构建流程 1.1 实验设计 新的模型要跟原有方案对比&#xff0c;而且是通过实验证明&#xff0c;特别注意模型和策略不能同时调整。一般实验设计包含以下流程&#xff1a; 问题&#xff1a;业务稳定后&#xff0c;可以去掉人工审核吗&#xff1f; 答&#xff1a;不可以…

PHP百度小程序rtc-room组件token获取经历

【前言】 目前就职盘古网络集团&#xff0c;一名PHPer程序员。我们的主营业务是百度产品相关&#xff0c;所以最近有了一个百度小程序项目&#xff0c;涉及其音视频组件做直播。 开发文档 百度智能小程序文档 鉴权token 百度智能小程序文档 嗯&#xff0c;很好的功能。结果测…