2023/09/14 qtc++

news2025/5/23 19:14:15

仿照vector手动实现自己的myVector部分功能,最主要实现二倍扩容功能

#include <iostream>

using namespace std;
template <typename V>
class myVector
{
private:
   V *data;      //存放数据
   int size;     //数组长度
   int capacity; //容量大小
public:
   myVector():size(0),capacity(1)
   {
      data = new V[capacity];
      cout<<"无惨构造"<<endl;
   }
   ~myVector()
   {
      delete []data;
      cout<<"析构函数"<<endl;
   }
    //判空
    bool empty();
    //返回指定的位置
    V& at(int index);
    //尾插
    void push_back(int value);
    //尾删
    void pop_back();
    //任意位置插入
    void insert(int pos,const V &value);
    //当前元素个数
    int get_size();
    //二倍扩容
    int expandCapacity();




};
//判空
template <typename V>
bool myVector<V>::empty()
{
    return size==0;
}
//当前元素的个数
template <typename V>
int myVector<V>::get_size()
{
    return size;
}
//二倍扩容
template <typename V>
int myVector<V>::expandCapacity()
{
    capacity *= 2;
    V *newdata = new V[capacity]; //定义一个新的指针指向原来的空间
    for(int i=0;i<size;i++)
    {
        newdata[i] = data[i];
    }
    delete []data; //将原来的空间释放掉
    data = newdata; //再把原来的指针更新为newdata,并且data指向了新的空间
    return capacity;
}

//尾插
template <typename V>
void myVector<V>::push_back(int value)
{
    if(size>=capacity)
    {
        expandCapacity();   //调用一次二倍扩容
    }
    data[size] = value;
    size++;
}
//尾删
template <typename V>
void  myVector<V>::pop_back()
{
    if(size>0)
    {
        size--;
    }
}
//返回指定的位置
template <typename V>
V& myVector<V>::at(int index)
{
    if(index<0||index>=size)
    {
        throw V(1);
    }
    return data[index];
}
//任意位置插入
template <typename V>
void myVector<V>::insert(int pos,const V &value)
{
    if(pos<0||pos>size)
    {
        throw V("pos");
    }
    if(size>=capacity)
    {
        expandCapacity();   //调用一次二倍扩容
    }
    for(int i=size;i>pos;i--)
    {
        data[i+1] = data[i];   //整体后移
    }
    data[pos] = value;
    size++;
}
int main()
{
   int i;
   myVector<int> v1;
   cout<<v1.empty()<<endl;    //1
   v1.push_back(80);
   v1.push_back(90);
   v1.push_back(5);
   for(i=0;i<static_cast<int>(v1.get_size());i++)
   {
       cout<<v1.at(i)<<" ";
   }
   cout<<endl;
   cout<<v1.empty()<<endl;
   cout<<"v1.cap = "<<v1.expandCapacity()<<endl;
   v1.push_back(80);
   v1.push_back(90);
   v1.push_back(5);
    cout<<"v1.cap = "<<v1.expandCapacity()<<endl;
    return 0;
}

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

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

相关文章

项目实战— pytorch搭建CNN处理MNIST数据集

项目文件夹介绍 项目文件夹 CNN_MNIST_practice文件夹是整个项目的文件夹&#xff0c;里面存放了六个子文件夹以及四个 .py 程序&#xff0c;接下来我们分别来介绍这些文件的内容。 其中 minist_all_CPU.py 是CPU版本的模型训练&#xff0b;测试程序&#xff0c;而 min…

Mongodb+NodeJS实现服务端架构

一、前言 使用Mogodb和Nodejs完成简单的服务端架构&#xff0c;读完此文章后你会学到&#xff1a;1. 如何安装Mongodb2. Mongodb命令行3. Mongodb的图形化工具Robomongo的使用4. 如何使用NodeJS指挥Mongodb二、安装Mongodb 1、Mongodb简介 官网: https://www.mongodb.com/源于…

2023最实用的订单管理软件有哪些?推荐这5款

订单管理软件是基于互联网技术和数据管理的信息化平台&#xff0c;用于维护和管理订单整个生命周期的系统&#xff0c;包括订单创建、订单修改、订单查询、订单管理、订单发货等一系列流程。 实用的订单管理软件&#xff0c;要具备基础功能的订单管理功能&#xff0c;包含订单…

Python中高效的爬虫框架

大家好&#xff0c;我是涛哥。 在信息时代&#xff0c;数据是无价之宝。许多开发者和数据分析师需要从互联网上采集大量的数据&#xff0c;用于各种用途&#xff0c;如分析、建模、可视化等。Python作为一门强大的编程语言&#xff0c;提供了多种高效的爬虫框架&#xff0c;使…

vue echarts条形统计图每个条上部分加数字

series: [{name: "",type: "bar",barGap: "-100%",//两条线可以重合在一起barWidth: 25,itemStyle: {normal: {label:{//在normal中放lable字段show:true,position: top,color:"#c3cbde",formatter:(params)>{//核心部分 formatter…

LeetCode 热题 100(八):贪心。121. 买卖股票的最佳时机、45. 跳跃游戏 II

题目一&#xff1a; 121. 买卖股票的最佳时机https://leetcode.cn/problems/best-time-to-buy-and-sell-stock/ 思路&#xff1a;因为时间复杂度O&#xff08;n&#xff09;&#xff0c;所以使用贪心来做。类似双指针&#xff0c;一个指针记录到当前循环时最小的股票价格&…

企业高效管理多个微信账号的软件

在现代社交媒体的时代&#xff0c;微信已经成为了人们交流、工作的重要工具之一。然而&#xff0c;对于一些企业来说&#xff0c;管理多个微信账号却是一项令人头疼的任务。好在&#xff0c;现在有了一款强大的软件&#xff0c;能够帮助企业高效地管理各个微信账号&#xff0c;…

js基础总结

js基础总结 ajax的post请求中&#xff0c;报错&#xff1a;Content type application/x-www-form-urlencoded;charsetUTF-8 not supported"数组和对象获取值的方式正则去掉特殊字符&#xff1a;【&#xff0c;】&#xff0c;“&#xff0c;”等&#xff0c;可同时处理多个…

投资理财基础知识分享(三)

大家好&#xff0c;我是财富智星&#xff0c;今天跟继续跟大家分享投资理财基础知识&#xff0c;买理财&#xff0c;何时买&#xff0c;何时卖的问题。 一、何时买&#xff1f; 在投资中&#xff0c;决定何时买入资产对于理财新手来说并不是一个应该花费过多精力的问题&#xf…

跟模型和中间层聊聊:什么是最好的AI原生应用?

软件 2.0 注定会发生&#xff1a;所有软件都值得用神经网络重做一遍。 这个 OpenAI 大神 Karpathy 多年前的预言&#xff0c;指向了今天 LLM 应用层的一个关键问题——如何基于 LLM 能力&#xff0c;设计好 AI 原生应用。 我们看到&#xff0c;应用层的创业者们感到悲观、质疑和…

WebDAV之π-Disk派盘 + 网盘精灵

网盘精灵是一款让您的iPhone、iPod和iPad变成WebDAV客户端的软件。它提供了以下功能: 1、WebDAV操作:网盘精灵支持通过WebDAV协议连接到服务器,进行文件的上传、下载和管理操作。您可以使用它连接到WebDAV服务器,方便地进行文件的传输和管理。 2、文件共享:通过网盘精灵…

改造el-dropdown ,实现多选效果,且当选项只剩下一个时,不允许取消

实现效果 实现代码 其中virtual-list是使用的插件,使得下拉数据多的时候,不会出现卡顿 正常不使用虚拟列表的时候可以这样写 <el-dropdown-menu slot"dropdown"><el-dropdown-item v-for"i in item.optionList" :key"i.id" :command&…

面试中常见的算法题和其python实现

在面试中&#xff0c;常见的算法题包括排序算法、查找算法、动态规划、贪心算法等。以下是一些常见算法题及其Python实现示例&#xff1a; 1. 快速排序&#xff08;Quick Sort&#xff09;&#xff1a; 题目描述&#xff1a;给定一个数组&#xff0c;使用快速排序算法对数组进…

亚马逊测评自养号成号率的关键因素及风控策略探讨

什么决定了自养号的成号率&#xff1f;这是测评团队最关心的问题之一 在测评自养号的过程中&#xff0c;除了需要在远程终端建立防火墙来做防关联和指纹浏览器外&#xff0c;干净的国外IP也是至关重要的 IP地址是互联网协议地址的缩写&#xff0c;为每个网络和主机分配一个逻…

WebGL模型视图投影矩阵

WebGL透视投影_山楂树の的博客-CSDN博客中的PerspectiveView代码一个问题是&#xff0c;我们用了一大段枯燥的代码来定义所有顶点和颜色的数据。示例中只有6个三角形&#xff0c;我们还可以手动管理这些数据&#xff0c;但是如果三角形的数量进一步增加的话&#xff0c;那可真就…

如何评估RPA需求?

在当今数字化的商业环境中&#xff0c;RPA&#xff08;Robotic Process Automation&#xff0c;即机器人流程自动化&#xff09;的需求日益增长&#xff0c;因为它能够帮助企业提高效率、减少错误、节省成本&#xff0c;以及提高员工满意度。然而&#xff0c;尽管RPA的潜力巨大…

秋目阅读企划 —— 小K图书推荐(文末赠书)

目录 1、写在前面2、深入理解Java高并发编程3、信息学奥赛一本通关4、文末赠书 1、写在前面 不知道大家有没有和我一样的感受&#xff0c;在发现一本好书的时候&#xff0c;非常想入手&#xff0c;但是奈何囊中羞涩…苦等1024&#xff0c;现在不用等啦~清华大学出版社的秋日阅读…

短剧解说小程序搭建,短剧解说小程序源码

短剧解说小程序搭建&#xff0c;短剧解说小程序源码 可定制开发小程序&#xff0c;H5&#xff0c;APP等系统 有需要可定制可出源码&#xff0c;这个是啥你懂的(VVVVVVVVVVV)&#xff1a;二五四九七八九零五九 需要源码或搭建可看上面的数字信息 短剧解说小程序搭建 小程序使用…

第37章_瑞萨MCU零基础入门系列教程之DAC数模转换模块

本教程基于韦东山百问网出的 DShanMCU-RA6M5开发板 进行编写&#xff0c;需要的同学可以在这里获取&#xff1a; https://item.taobao.com/item.htm?id728461040949 配套资料获取&#xff1a;https://renesas-docs.100ask.net 瑞萨MCU零基础入门系列教程汇总&#xff1a; ht…

【WFA】【Enhanced open】CT_OWE_DHgroup_STA_NoAssociation-AllGroupsRejected_10338_1

测试报告如下: Fail的关键log: 当连接到ap失败时,驱动程序将尝试连接到ap。如果ap仅支持Group 20,并且sta支持Group 19、20。sta将首先尝试Group 19,ap将通过状态代码77拒绝它。然后驱动程序将尝试连接Group 19的ap,仍然达到最大重试次数。那么sta将尝试第Group 20 。 …