MyVector 的实现

news2024/11/21 0:13:38

myVector

#include <iostream>
#include <vector>

int size2=0;

using namespace std;

template <typename type>
class myvector
{
    int size;
    type value;
    type *arr;

public:
    //无参构造
    myvector(){};

    //有参构造
    myvector(int s,type v):size(s),value(v)
    {
        arr=new int[size];
        for(int i=0;i<size;i++)
        {
            arr[i]=value;
        }
    }

    //拷贝构造
    myvector(const myvector&other):size(other.size),value(other.value)
    {
        memcpy(this->arr,other.arr,size);
    }

    //析构函数
    ~myvector()
    {
        delete [] arr;
        arr=nullptr;
    }

    //求容器的大小
    type my_capacity();

    //添加元素
    void my_push(const type & value);

    //展示元素
    void show();

    //求容器的真实大小
    type my_size();

    //访问容器中的元素
    type my_at(type local);

    //给容器中的元素赋值
    void my_assign(int size,const type &value);

    //返回起始位置的引用
    type my_front();

    //返回最后一个位置的引用
    type my_back();

    //返回起始元素的迭代器
    type *my_begin();

    //返回末尾下一个位置的迭代器
    type *my_end();

    //指定位置的插入
    type *my_insert(type local,const type &value);

    //清空容器中的元素
    void my_clear();

    //判空函数
    bool my_empty();

};

//求容器的大小
template <typename type>
type myvector<type>::my_capacity()
{
    return size;
}

//添加元素
template <typename type>
void myvector<type>::my_push(const type & value)
{

    //将初始化的size赋值给size2
    if(size2==0)
    {
        size2=size;
    }
    if(size2>=size)
    {
        size2=size;
        size=size*2;  //二倍扩容
    }
    if(size2<=size)
    {
        size2++;
    }

    arr[size2-1]=value;
    cout<<"添加成功"<<endl;
}

//展示元素
template <typename type>
void myvector<type>::show()
{
    for(int i=0;i<size2;i++)
    {
        cout<<arr[i]<<"\t";
    }
    cout<<endl;
}

//求容器的真实大小
template <typename type>
type myvector<type>::my_size()
{
    int size3=size2;
    return size3;
}

//访问容器中的元素
template <typename type>
type myvector<type>::my_at(type local)
{
    return arr[local];
}

//给容器中的元素赋值
template <typename type>
void myvector<type>::my_assign(int num,const type &value)
{
    for(int i=num-1;i>=0;i--)
    {
        arr[i]=value;
    }
}

//返回起始位置的引用
template <typename type>
type myvector<type>::my_front()
{
    return arr[0];
}

//返回最后一个位置的引用
template <typename type>
type myvector<type>::my_back()
{
    return arr[size2-1];
}

//返回起始元素的迭代器
template <typename type>
type* myvector<type>::my_begin()
{
    type *ptr=arr;
    return ptr;
}

//返回末尾下一个位置的迭代器
template <typename type>
type* myvector<type>::my_end()
{
    type *ptr1=(arr+size2-1);
    return ptr1;
}

//指定位置的插入
template <typename type>
type *myvector<type>::my_insert(type local,const type &value)
{
    size2++;
    for(int i=size-1;i>=local;i--)
    {
        arr[i+1]=arr[i];
    }

    //插入
    type *ptr2=(arr+local);
    *ptr2=value;
    return ptr2;
}

//清空容器中的元素
template <typename type>
void myvector<type>::my_clear()
{
    size2=0;
    cout<<"清空成功"<<endl;
}

//判空函数
template <typename type>
bool myvector<type>::my_empty()
{
    if(size2==0)
        return 1;
    else
        return 0;
}

int main()
{
    //初始化
    myvector<int> V1(5,7);

    //容器大小
    cout<<"容器大小为:"<<V1.my_capacity()<<endl;

    //添加元素
    V1.my_push(8);
    V1.my_push(8);
    V1.my_push(8);

    //展示元素
    V1.show();

    //真实大小
    cout<<"真实大小:"<<V1.my_size()<<endl;

    //访问容器中的元素
    cout<<V1.my_at(4)<<endl;

    //给容器中的元素赋值
    V1.my_assign(5,9);
    V1.show();

    //返回起始位置的引用
    cout<<"起始元素为:"<<V1.my_front()<<endl;

    //返回最后一个位置的引用
    cout<<"最后位置元素为:"<<V1.my_back()<<endl;;

    //返回起始元素的迭代器
    int *p;
    p=V1.my_begin();
    cout<<"起始元素为:"<<*p<<endl;

    //返回末尾下一个位置的迭代器
    int *p1;
    p1=V1.my_end();
    cout<<"最后位置元素为:"<<*p1<<endl;

    //指定位置的插入
    V1.my_insert(2,3);
    V1.show();

    //判空
    cout<<V1.my_empty()<<endl;;
    return 0;
}

2、思维导图

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

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

相关文章

uni-app:通过三目运算动态增加样式效果

效果 代码 第一条&#xff1a;当变量line的值等于abc时&#xff0c;class就等于yes,反之class等于no&#xff08;显然等于abc&#xff0c;执行yes,前景色为红色&#xff09; 第一条&#xff1a;当变量line1的值等于abc时&#xff0c;class就等于yes,反之class等于no&#xff…

Hyper-V 安装 CentOS (二)

总目录 https://preparedata.blog.csdn.net/article/details/132877836 文章目录 总目录一、Hyper-V 创建centos的虚拟机实例二、虚拟机安装Centos ISO镜像三、重启后&#xff0c;进入系统 一、Hyper-V 创建centos的虚拟机实例 网络连接先不选择&#xff0c;后面文章专门配置网…

界面控件DevExpress WinForms HTML-CSS模板:预设计UI模板加速.NET应用开发

在过去的一年里&#xff0c;DevExpress官方引入了两个强大的功能来加速/简化.NET桌面应用的开发&#xff0c;当一起使用时&#xff0c;您可以创建优雅/个性化的用户界面&#xff0c;减少重复的代码&#xff0c;从而节省更多的项目时间。 DevExpress WinForms有180组件和UI库&am…

Spark集成hudi创建表报错

环境描述: hudi版本:0.13.1 spark版本:3.3.2 Hive版本:3.1.3 Hadoop版本:3.3.4 问题1: 描述:按照官方文档运行spark-sql创建spark的hudi表报错 建表语句: CREATE TABLE stg.spark_mor_test_01 (uuid string,name string,age int,ts …

数据结构-leetcode-移除元素

int removeElement(int* nums, int numsSize, int val){int start0;int end0;int flag0;for(int i 0;i<numsSize;i){if(nums[end]val){end;flag;}else if(nums[end]!val){nums[start]nums[end];end;start;}}return numsSize-flag; } 注&#xff1a;时间复杂度为O(N)&#xf…

pnpm基础教程

一、概述 1、更小 使用 npm 时&#xff0c;依赖每次被不同的项目使用&#xff0c;都会重复安装一次。 而在使用 pnpm 时&#xff0c;依赖会被存储在内容可寻址的存储中。 2、更快 依赖解析。 仓库中没有的依赖都被识别并获取到仓库。目录结构计算。 node_modules 目录结构是…

自动化测试(五):自动化测试框架的搭建和基于yaml热加载的测试用例的设计

该部分是对自动化测试专栏前四篇的一个补充&#xff0c;本次参考以下文章实现一个完整的谷歌翻译接口自动化测试:   [1]【python小脚本】Yaml配置文件动态加载   [2]【python做接口测试的学习记录day8——pytest自动化测试框架之热加载和断言封装】 目标&#xff1a;框架封…

ARM架构-伪指令、伪操作、ATPCS协议

汇编中的符号&#xff1a; 1.指令&#xff1a;能够编译生成一条32位的机器码且能被CPU识别和执行 2.伪指令&#xff1a;本身不是指令&#xff0c;编译器可以将其替换成若千条指令 3.伪操作:不会生成代码&#xff0c;只是在编译阶段告诉编译器怎么编译&#xff08;例如&#x…

如何利用软文推广进行SEO优化(打造优质软文,提升网站排名)

在当今的互联网时代&#xff0c;SEO优化成为了网站推广的关键。而软文推广作为一种有效的推广方式&#xff0c;其优点不仅仅局限于SEO&#xff0c;还可以带来更多的曝光和用户流量。本文将深入探讨如何做好软文推广&#xff0c;从而提升网站排名和流量。 了解目标受众群体 内容…

【MySQL】基础SQL语句——库的操作

文章目录 一. 创建数据库1.1 基础语句1.2 字符集和校验规则1.3 校验规则对读取数据的影响 二. 查看数据库三. 修改数据库四. 删除数据库及备份4.1 删除4.2 备份和还原 结束语 一. 创建数据库 1.1 基础语句 最简洁的创建数据库的SQL语句是&#xff1a; create database db_nam…

iOS 使用陀螺仪实现裸眼3d效果

直接上完整代码 // // BannerView.m // Test // // Created by liubo on 2023/7/20. //#import "LB3DBannerView.h" #import <Masonry/Masonry.h> #import <CoreMotion/CoreMotion.h>interface LB3DBannerView (){CGFloat maxOffset;CGFloat lastGra…

新增动态排序图、桑基图、AntV组合图,DataEase开源数据可视化分析平台v1.18.10发布

2023年9月14日&#xff0c;DataEase开源数据可视化分析平台正式发布v1.18.10版本。 这一版本的功能升级包括&#xff1a;数据集方面&#xff0c;对字段管理的后台保存做了相关优化&#xff0c;降低了资源消耗&#xff1b;仪表板方面&#xff0c;对联动、查询结果以及过滤组件等…

Java 泛型 T,E,K,V,?

泛型带来的好处 在没有泛型的情况的下&#xff0c;通过对类型 Object 的引用来实现参数的“任意化”&#xff0c;“任意化”带来的缺点是要做显式的强制类型转换&#xff0c;而这种转换是要求开发者对实际参数类型可以预知的情况下进行的。对于强制类型转换错误的情况&#xf…

App测试中ios和Android有哪些区别呢?

App测试中&#xff0c;大家最常问到的问题就是&#xff1a;ios和 Android有什么区别呢&#xff1f; 在Android端&#xff0c;我们经常会使用 JavaScript、 HTML、 CSS等技术来编写一些简单的 UI界面。而 iOS端&#xff0c;我们经常会使用到 UI设计、界面布局、代码结构、 API等…

IF 22.1,中科院1区TOP,顶级期刊更名!

期刊更名 为了更好服务于催化领域科技工作者&#xff0c;Applied Catalysis B: Environmental将全新改版&#xff0c;2024年起环境催化和能源催化将共同融入期刊&#xff0c;正式更名为Applied Catalysis B: Environment and Energy。另外&#xff0c;将增加封面图文摘要&…

【Spring Boot】数据缓存Redis实现高并发 —— Redis入门

&#x1f33f;欢迎来到衍生星球的CSDN博文&#x1f33f; &#x1f341;本文主要学习Redis的入门 &#x1f341; &#x1f331;我是衍生星球&#xff0c;一个从事集成开发的打工人&#x1f331; ⭐️喜欢的朋友可以关注一下&#x1faf0;&#x1faf0;&#x1faf0;&#xff0c;…

IJK源码分析-android篇

整个IJK播放器框架相较于原始ffplay.c播放器,在三处进行了抽象,分别是: (1)解码器配置初始化操作,对应的数据结构是: struct IJKFF_Pipeline {SDL_Class *opaque_class;IJKFF_Pipeline_Opaque *opaque;void (*func_destroy) (IJKFF_Pipe…

带讲解的自行车租赁系统,可做毕设/课设

适合人群: 马上毕业/需要毕设的同学 技术栈: 前后端分离 前端使用: Vue Element 后端使用: SpringBoot Mysql8.0 Mybatis 支付宝支付 功能截图: 分为管理员端和 普通用户端 和 维修人员端 阿里大佬亲讲 免费看地址: 见评论区

前端笔面编程收录【按公司】

目录 虚拟DOM【腾讯音乐笔试】 连字转驼峰【美团一面】 1.split(-) 2.toUpperCase() 3.slice(1) 用友sp 一面【二选一】 数组相邻和最大的对应两个元素 千位分割【无负数&#xff0c;含小数】 二面 华容道&#xff1a;BFS k / 3, y k % 3; //一维数组下标转化到二…

CISP—信息安全保障基础

0x00 前言 CTF 加解密合集CTF Web合集网络安全知识库溯源相关CISP汇总 文中工具皆可关注 皓月当空w 公众号 发送关键字 工具 获取 0x01 信息安全概念 1.信息安全的定义 1.1 ISO 对安全的定义 为数据处理系统建立和采取技术、管理的安全保护&#xff0c;保护计算机硬件、软…