9.14 C++作业

news/2024/5/2 16:51:06

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

#include <iostream>using namespace std;template <typename T>
class Myvector
{T *data;    //存储数据的数组int len;      //当前数组的长度int mycapa;   //容纳数据的总容量public://构造函数Myvector():data(NULL),len(0),mycapa(0){cout<<"无参构造"<<endl;}Myvector(int n, T a){data =new T[n];len = n;mycapa = n;for(int i=0;i<n;i++){data[i]=a;}cout<<"有参构造"<<endl;}//判空bool my_empty(){if(0 == len){return 0;}return 1;}//判满bool my_full(){if(len == mycapa){return 0;}return 1;}//在末尾插入一个元素int mypop_back(T a){if(0 == mycapa){mycapa = 1;data = new T[1];}else if(len+1 > mycapa)        //如果数组长度大于最大容量,最大容量二倍扩容{mycapa = 2*len;int *p = new T[mycapa];for(int i=0; i<len; i++){p[i] = data[i];}delete []data;data = p;}data[len] = a;len++;}//任意插入void my_insert(int pos, T a){if(0 == mycapa){mycapa = 1;data = new T[1];data[0] = a;}else if(len+1 > mycapa){mycapa = 2*len;int *p = new T[mycapa];for(int i=0; i<pos; i++){p[i] = data[i];}p[pos] = a;for(int i=pos; i<len; i++){p[i+1] = data[i];}delete []data;data = p;}else{for(int i=len-1; i>=pos; i--){data[i+1] = data[i];}data[pos] = a;}len++;}//移除最后一个元素void mypop_back(){len--;cout<<"移除最后一个元素成功"<<endl;}//删除指定位置元素void my_erase(int pos){if(my_empty() && pos>len){cout<<"删除失败"<<endl;}for(int i=pos; i<len; i++){this->data[i-1] = this->data[i];}len--;cout<<"删除指定位置元素成功"<<endl;}//展示void my_show(){cout<<"展示元素";for(int i=0; i<len; i++){cout<<data[i];cout<<" ";}cout<<endl;}//返回能容纳的最大容量void my_capacity(){cout<<"最大容量为"<<mycapa<<endl;}//返回指定位置元素void my_at(int pos){cout<<"第"<<pos<<"个元素是"<<data[pos]<<endl;}//清空所有元素int my_clear(){cout<<"已全部清空"<<endl;return len=0;}};using namespace std;int main()
{Myvector<int> m(4,6);   //有参构造创建了4个元素,每个元素都是6m.my_show();m.mypop_back(7);      //尾插m.mypop_back(8);m.my_show();m.my_capacity();      //返回最大容量,此时为8cout<<"***************************************"<<endl;m.my_insert(5,9);     //任意位置插入元素m.my_show();cout<<"***************************************"<<endl;m.my_erase(5);        //任意位置删除元素m.my_show();cout<<"***************************************"<<endl;m.mypop_back();       //移除最后一个元素m.my_show();cout<<"***************************************"<<endl;m.my_at(2);m.my_clear();         //清空m.my_show();return 0;
}

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

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

相关文章

Python第一次作业练习

题目分析&#xff1a; """ 参考学校的相关规定。 对于四分制&#xff0c;百分制中的90分及以上可视为绩点中的4分&#xff0c;80 分及以上为3分&#xff0c;70 分以上为2分&#xff0c;60 分以上为1分; 五分制中的5分为四分制中的4分&#xff0c;4分为3分&#…

JAVASE 游戏

朴素的拼图游戏&#xff0c;通过WASD移动&#xff0c;我自己都不太会&#xff0c;可以通过篡改内部代码来取得想要的成功彩蛋 代码&#xff1a; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.KeyEvent; import java.awt.…

竞赛 基于机器视觉的行人口罩佩戴检测

简介 2020新冠爆发以来&#xff0c;疫情牵动着全国人民的心&#xff0c;一线医护工作者在最前线抗击疫情的同时&#xff0c;我们也可以看到很多科技行业和人工智能领域的从业者&#xff0c;也在贡献着他们的力量。近些天来&#xff0c;旷视、商汤、海康、百度都多家科技公司研…

安装samba服务器

1.实验目的 &#xff08;1&#xff09;了解SMB和NETBIOS的基本原理 &#xff08;2&#xff09;掌握Windows和Linux之间&#xff0c;Linux系统之间文件共享的基本方法。 2.实验内容 &#xff08;1&#xff09;安装samba服务器。 &#xff08;2&#xff09;配置samba服务器的…

多款大模型向公众开放,百模大战再升级?

作为一种使用大量文本数据训练的深度学习模型&#xff0c;大模型可以生成自然语言文本或理解语言文本的含义&#xff0c;是通向人工智能的一条重要途径。大模型可以应用于各种机器学习任务&#xff0c;包括自然语言处理、计算机视觉、语音识别、机器翻译、推荐系统、强化学习等…

14:00面试,14:06就出来了,问的问题有点变态。。。

从小厂出来&#xff0c;没想到在另一家公司又寄了。 到这家公司开始上班&#xff0c;加班是每天必不可少的&#xff0c;看在钱给的比较多的份上&#xff0c;就不太计较了。没想到5月一纸通知&#xff0c;所有人不准加班&#xff0c;加班费不仅没有了&#xff0c;薪资还要降40%,…