C++:封装一个Vector容器

news2024/11/18 11:37:40

 

#include <iostream>

using namespace std;
template <typename T>

class Myvector
{
    private:
        T * first;
        T * last;
        T * end;

    public:
            //构造函数
        Myvector(int size = 10)
        {
            this->first = new T[size];
            this->last = this->first;
            this->end = this->first + size;
        }
            //析构函数
        ~Myvector()
        {
            delete []first;
        }
            //拷贝构造
        Myvector(const Myvector& other)
        {
            int size = other.end - other.first;
            this->first = new T[size];
            int len = other.last - other.first;

            memmove(this->first,other.first,len*sizeof(T));
            this->last = this->first + len;
            this->end = this->first + size;

            return *this;
        }
            //拷贝赋值
        Myvector& operator = (const Myvector &other)
        {
            int size = other.end - other.first;
            if(this->first != nullptr)
            {
                delete []this->first;
                this->first = new T[size];
            }else
            {
                this->first = new T[size];
            }
            int len = other.last - other.first;
            memmove(this->first,other.first,len*sizeof(T));
            this->last = this->first +len;
            this->end= this->first + size;
            return  *this;
        }
            //T &at(int index)
        T &at(int index)
        {
            for(int i=*first;i<*last;i++)
            {
                if(first[i]=index)
                return first[i];
            }

        }


            //empty()
        bool empty()
        {
            return this->last==this->first;
        }

            //full()
        bool full()
        {
            return this->end == this->last;
        }

            //front()
        T& front()
        {

            return *this->first;
        }


            //back()
        T& back()
        {

            return  *this->last;
        }


            //size()
        int size()
        {
            return this->last-this->first;
        }

            //clear()
        void clear()
        {
            delete []first;
            this->first = nullptr;
        }

            //expand()     二倍扩容函数
        void expand()
        {
            int size = this->last-this->first;
            T*temp = new T[2*size];
            memcpy(this->temp,this->first,sizeof(T)*(this->end - this->first));
            delete []first;
            this->first = this->temp;
            this->last = this->first + size;
            this->end = this->first + 2*size;

            return *this;
        }

            //push_back()
        void push_back(const T& value)
        {
            if(full())
            {
                expand();
            }
            *last++ = value;

        }

            //pop_back()
        void pop_back()
        {
            if(empty())
            {
                return;
            }
            *last--;
        }


};


int main()
{
    cout << "Hello World!" << endl;
    return 0;
}

 思维导图:

 

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

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

相关文章

Meta论文文献检索国内外检索数据库

今天分享国内外的一个文献检索 因为国内的文献存在一种情况是什么 国内的文献相对来说质量可能大部分来说可能质量偏低 这个不是说是崇洋媚外 我们不能以偏概全只能说大部分来说可能质量这个太低 可以想一下其实如果文章的质量真的是很好的话大家也都知道肯定都发SCI 对于…

【每日一题】—— C - (K+1)-th Largest Number (AtCoder Beginner Contest 273)

&#x1f30f;博客主页&#xff1a;PH_modest的博客主页 &#x1f6a9;当前专栏&#xff1a;每日一题 &#x1f48c;其他专栏&#xff1a; &#x1f534; 每日反刍 &#x1f7e1; C跬步积累 &#x1f7e2; C语言跬步积累 &#x1f308;座右铭&#xff1a;广积粮&#xff0c;缓称…

「二分搜索Binary Search」

文章目录 0 框架1 基本二分1.1 寻找一个数题解Code结果 1.2 寻找左侧边界的二分搜索Code 1.3 寻找右侧边界的二分搜索Code 0 框架 int binarySearch(vector<int> &nums, int target) {int left 0, right ....;//right具体看情况while (....){int mid left (righ…

ThinkPHP8知识详解:给PHP8和MySQL8添加到环境变量

在PHPenv安装的时候&#xff0c;环境变量默认的PHP版本是7.4的&#xff0c;MySQL的版本是5.7的&#xff0c;要想使用ThinkPHP8来开发&#xff0c;就必须修改环境变量&#xff0c;本文就详细讲解了如果修改PHP和MySQL的环境变量。 1、添加网站 启动phpenv&#xff0c;网站&…

抖音SEO源码开发指南:介绍如何开发抖音SEO源码的基本步骤和要点。

一、 抖音SEO源码开发指南&#xff1a; 确定目标&#xff1a;首先要明确开发抖音SEO源码的目标是什么&#xff0c;是提高搜索排名还是增加用户量等。根据不同的目标来制定开发策略和思路。 分析竞争&#xff1a;对于同类产品&#xff0c;要进行竞争分析&#xff0c;了解对手的…

安装Windows版nginx以及部署前端代码并就解决刷新出现404

文章目录 1.安装Nginx2.启动Nginx以及常用命令2.1 常用命令 3.部署前端打好的dist包4.前端部署nginx刷新后404&#xff0c;解决Nginx刷新页面后404的问题 1.安装Nginx &#xff08;1&#xff09;下载地址&#xff1a;https://nginx.org/en/download.html &#xff08;2&#x…

从0到1精通,Python接口自动化测试,测试进阶之道...

目录&#xff1a;导读 前言一、Python编程入门到精通二、接口自动化项目实战三、Web自动化项目实战四、App自动化项目实战五、一线大厂简历六、测试开发DevOps体系七、常用自动化测试工具八、JMeter性能测试九、总结&#xff08;尾部小惊喜&#xff09; 前言 如何实现python接…

【学习篇】学习Linux下常用的shell指令

前言&#xff1a;2020年写的一篇博文&#xff0c;Linux下好多指令都不太会用&#xff0c;想利用这个五一好好背一背&#xff0c;要不然用到的时候都反应不过来&#xff0c;还会用错&#xff0c;造成不可估量的风险&#xff0c;哭。。。 以下只摘录了我工作中经常要用到的一些指…

剑指offer10-I.斐波那契数列

学计算机的对这道题肯定不陌生&#xff0c;我记得是学C语言的时候学递归的时候有这道题&#xff0c;于是我就世界用递归写了如下代码&#xff1a; class Solution {public int fib(int n) {if(n1) return 1;if(n0) return 0;return (fib(n-1) fib(n-2)) % 1000000007;} } 到…

【Terraform学习】TerraformCloud入门介绍(快速入门)

TerraformCloud入门介绍 什么是 TerraformCloud&#xff1f; Terraform Cloud是Hashicorp Terraform的SaaS版本。 免费版功能 免费版功能包括版本控制集成、远程计划和实施远程计划和实施、通知及webhook、全http API驱动、状态管理、模拟计划、私有化模块注册器以及全HTTP界…

Nginx 高可用负载均衡(三种模式)

一、nginx普通集群负载均衡 1、安装keepalived (1)下载 https://www.keepalived.org/download.html(2)解压 tar -zxvf keepalived-2.0.18.tar.gz(3)使用configure命令配置安装目录与核心配置文件所在位置&#xff1a; ./configure --prefix/usr/local/keepalived --sysconf/e…

Java JVM虚拟机内部体系结构

JVM(Java虚拟机)是一个抽象机器。 它是一个提供可以执行Java字节码的运行时环境的规范。JVM可用于许多硬件和软件平台(即JVM是平台相关的)。 什么是JVM&#xff1f; JVM(Java虚拟机)是&#xff1a; 指定Java虚拟机的工作的规范。 但实现提供程序是独立的选择算法。 其实现是由…

25.5 matlab里面的10中优化方法介绍——牛顿法(matlab程序)

1.简述 1 牛顿法简介 牛顿迭代法&#xff08;Newton’s method&#xff09;又称为牛顿-拉夫逊&#xff08;拉弗森&#xff09;方法&#xff08;Newton-Raphson method&#xff09;&#xff0c;它是牛顿在17世纪提出的一种在实数域和复数域上近似求解方程的方法。 多数方程不存…

PHP登陆/php登录--【白嫖项目】

强撸项目系列总目录在000集 PHP要怎么学–【思维导图知识范围】 文章目录 本系列校训本项目使用技术 上效果图phpStudy 设置导数据库 项目目录如图&#xff1a;页面代码后台代码 这么丑的界面能忍&#xff1f;配套资源作业&#xff1a; 本系列校训 用免费公开视频&#xff0…

二叉树进阶(红黑树改造)

目录 引言 改造比较 1.颜色定义 2.节点构造 3.迭代器 3.1 迭代器的模板参数 3.2 迭代器的构造函数 3.3 迭代器的运算符重载函数 3.3.1 前置 3.3.2 前置-- 3.3.3 源码对比 3.3.4 其它运算符重载 4.红黑树改造 4.1 红黑树的begin(),end()函数 4.2 红黑树的模板…

又有一个手艺人震惊了B站用户

飞瓜数据&#xff08;B站版&#xff09;【热门视频榜】周榜显示&#xff0c;霸占全站视频流量第一的是来自UP主爱捣鼓的邢志磊发布的作品《我花了半年时间给猫做了个房子》。 视频在一周时间内新增播放1232.2万&#xff0c;新增点赞139.4万。 根据视频详细数据显示&#xff0c…

超详细推导逻辑回归公式与代码实现(二分类与多分类)

目录 概述逻辑回归理论数学推导二类分类多分类 代码实现备注 概述 本文使用梯度下降法对逻辑回归进行训练&#xff0c;使用类似于神经网络的方法进行前向传播与反向更新&#xff0c;使用数学公式详细推导前向传播与反向求导过程&#xff0c;包括二分类和多分类问题&#xff0c…

农业管理3d可视化管理大屏展示为乡村新基建加速

随着科技的不断发展&#xff0c;智慧农业已经成为当今社会农业发展的一个重要趋势。而数字孪生技术作为一种新兴的技术手段&#xff0c;正在逐渐应用到智慧农业领域中。 数字孪生公司深圳华锐视点基于数字孪生为核心技术打造的智慧大脑为乡村新基建加速&#xff0c;让乡村更“聪…

Python入门【推导式创建序列、字典推导式、集合推导式】(九)

&#x1f44f;作者简介&#xff1a;大家好&#xff0c;我是爱敲代码的小王&#xff0c;CSDN博客博主,Python小白 &#x1f4d5;系列专栏&#xff1a;python入门到实战、Python爬虫开发、Python办公自动化、Python数据分析、Python前后端开发 &#x1f4e7;如果文章知识点有错误…

239.滑动窗口最大值

leetcode原题链接 题目描述&#xff1a; 给你一个整数数组 nums&#xff0c;有一个大小为 k 的滑动窗口从数组的最左侧移动到数组的最右侧。你只可以看到在滑动窗口内的 k 个数字。滑动窗口每次只向右移动一位。 返回 滑动窗口中的最大值 。 示例1: 输入&#xff1a;nums [1,…