最新实验报告miniVector.docx
- 文档编号:1609380
- 上传时间:2023-05-01
- 格式:DOCX
- 页数:13
- 大小:69KB
最新实验报告miniVector.docx
《最新实验报告miniVector.docx》由会员分享,可在线阅读,更多相关《最新实验报告miniVector.docx(13页珍藏版)》请在冰点文库上搜索。
最新实验报告miniVector
实验报告(miniVector)
数据结构实验报告
2015/2016
(1)
实验题目miniVector函数实现与调试
学生姓名唐超
学生学号201426810618
学生班级计自1401班
任课教师刘端阳
提交日期2015-10-30
计算机科学与技术学院
●实验内容
设计并实现完整的miniVector类,要求增加插入和删除函数,并测试主要
的成员函数。
●设计思路
miniVector类中的其它函数作业之前已经给出,思路详见注释。
下面主要讲讲insert函数与Delete函数的实现思路;
1、关于insert函数:
首先先有一个容量检测的语句,如果实际容量与总容量相等就执行reserve扩容,接下来实现方法是从后往前循环,直到要插入的位置停止,期间将所有数值都向后移动一位,留出来一个空,然后把需要插入的数放进去,最后把实际容量加1。
代码:
voidminiVector:
:
insert(intpos,intnum)
{
if(vSize==vCapacity)
reserve(2*vCapacity,true);
if(pos<0||pos>vSize)
{
cout<<"NoPermitting\n";
exit
(1);
}
for(intx=vSize;x>vSize-1-pos;--x)
vArr[x]=vArr[x-1];
vArr[pos-1]=num;
vSize++;
}
2、关于Delete函数:
首先遍历找到要删除元素,然后用一个从要删除的位置循环到最后,把要删除的位置的数用后面的数覆盖掉,最后把实际容量减1,如果找不到要删除的数则输出“NOExisting”。
代码:
voidminiVector:
:
Delete(intk)
{
boolexist=false;
for(inta=0;a if(vArr[a]==k) { exist=true; intflag=a; for(inty=flag;y vArr[y]=vArr[y+1]; vSize--; } if(! exist)cout<<"NOExisting\n"; } ●程序代码 //miniVector.h #include usingnamespacestd; classminiVector { public: miniVector(intsize=0);//构造函数 miniVector(constminiVector&obj);//以对象为形参的构造函数 ~miniVector();//析构函数 miniVector&operator=(constminiVector&rhs); //重载赋值运算符实现对象与对象之间的赋值 int&back();//返回数组最后一个元素的值 constint&back()const;//返回数组最后一个元素的值且为只读 int&operator[](inti);//重载下标运算符 constint&operator[](inti)const;//重载下标运算符且为只读 voidpush_back(constint&item);//从数组的尾部压入一个值为item的元素 voidpop_back();//删除数组最后一个元素 intsize()const;//返回数组元素个数 boolempty()const;//清空数组元素 intcapacity()const;//返回数组容量且为只读 voiddisplay(ostream&out);//输出数组中的元素 voidDelete(intk);//删除数组中指定值的元素 voidinsert(intpos,intnum);//在指定位置插入指定数值的元素 private: intvCapacity;//数组容量 intvSize;//数组元素数量 int*vArr;//指向动态数组的指针 voidreserve(intn,boolcopy);//调整数组容量,且可以保留数组原数据 }; //miniVector.cpp //主要是两个构造函数,一个是输入元素个数的元素默认值为0的构造函数, 一个则为以对象为形参的构造函数 #include"miniVector.h" usingnamespacestd; miniVector: : miniVector(intsize): vSize(0),vCapacity(0),vArr(NULL) { inti; if(size==0)return; reserve(size,false); vSize=size; for(i=0;i vArr[i]=0; } miniVector: : miniVector(constminiVector&obj): vSize(0),vCapacity(0),vArr(NULL) { inti; if(obj.vSize==0)return; reserve(obj.vSize,false); vSize=obj.vSize; for(i=0;i vArr[i]=obj.vArr[i]; } //~miniVector.cpp //析构函数 #include"miniVector.h" usingnamespacestd; miniVector: : ~miniVector() { if(vArr! =NULL) delete[]vArr; } //back.cpp //返回最后一个元素的值 #include"miniVector.h" usingnamespacestd; int&miniVector: : back() { if(vSize==0) cout<<"miniVectorback(): vectorempty\n"; returnvArr[vSize-1]; } constint&miniVector: : back()const { if(vSize==0) cout<<"miniVectorback(): vectorempty\n"; returnvArr[vSize-1]; } //capacity.cpp //返回数组的总容量 #include"miniVector.h" usingnamespacestd; intminiVector: : capacity()const { returnvCapacity; } //delete.cpp //删除指定数值的元素 voidminiVector: : Delete(intk) { boolexist=false; for(inta=0;a if(vArr[a]==k) { exist=true; intflag=a; for(inty=flag;y vArr[y]=vArr[y+1]; vSize--; } if(! exist)cout<<"NOExisting\n"; } //display.cpp //输出数组中的所有元素 #include"miniVector.h" usingnamespacestd; voidminiVector: : display(ostream&out) { for(inti=0;i out< out< } ostream&operator<<(ostream&out,miniVector&vec) { vec.display(out); returnout; } //empty.cpp //判断数组是否为空 #include"miniVector.h" usingnamespacestd; boolminiVector: : empty()const { returnvSize==0; } //insert.cpp //在特定位置插入特定元素 voidminiVector: : insert(intpos,intnum) { if(vSize==vCapacity) reserve(2*vCapacity,true); if(pos<0||pos>vSize) { cout<<"NoPermitting\n"; exit (1); } for(intx=vSize;x>vSize-1-pos;--x) vArr[x]=vArr[x-1]; vArr[pos-1]=num; vSize++; } //operator[].cpp //重载下标运算符 #include"miniVector.h" usingnamespacestd; int&miniVector: : operator[](inti) { if(i<0||i>vSize) { cerr<<"miniVector: indexrangeerror\n"; exit (1); } returnvArr[i]; } //operator=.cpp //重载赋值运算符实现对象之间的赋值 #include"miniVector.h" usingnamespacestd; miniVector&miniVector: : operator=(constminiVector&rhs) { if(rhs.vSize>vSize) { cerr<<""; exit (1); } for(inti=0;i vArr[i]=rhs.vArr[i]; vSize=rhs.vSize; returnminiVector(vSize); } //pop_back.cpp //删除最后一个元素 #include"miniVector.h" usingnamespacestd; voidminiVector: : pop_back() { if(vSize==0) cout<<"miniVectorpop_back(): vectorisempty\n"; vSize--; } //push_back.cpp //在末尾添加一个元素 #include"miniVector.h" usingnamespacestd; voidminiVector: : push_back(constint&item) { if(vSize==vCapacity) { if(vCapacity==0)reserve(1,false); elsereserve(2*vCapacity,true); } vArr[vSize]=item; vSize++; } //reserve.cpp //调整数组容量 #include"miniVector.h" usingnamespacestd; voidminiVector: : reserve(intn,boolcopy) { int*newArr; inti; newArr=newint[n]; if(newArr==NULL) cout<<"miniVectorreserve(): memoryallocationfailure\n"; if(copy) for(i=0;i newArr[i]=vArr[i]; if(vArr! =NULL)delete[]vArr; vArr=newArr; vCapacity=n; } //size.cpp //返回数组实际元素个数 #include"miniVector.h" usingnamespacestd; intminiVector: : size()const { returnvSize; } //main.cpp #include"miniVector.h" #include usingnamespacestd; intmain() { miniVectora(10);//定义一个miniVector对象,容量为10; cout<<"对象a中的元素: \n"; a.display(cout);//输出a中的所以元素 a.push_back(6); cout<<"push_back函数作用后对象a中的元素: \n"; a.display(cout);//测试push_back函数 miniVectorb(a); cout<<"对象b中的元素: \n"; b.display(cout);//测试miniVector以对象为形参的构造函数 b.Delete(6); cout<<"delete函数作用后对象b中的元素: \n"; b.display(cout);//测试delete函数 b.insert(3,78); cout<<"insert函数作用后对象b中的元素: \n"; b.display(cout);//测试insert函数 b.pop_back(); cout<<"pop_back函数作用后对象b中的元素: \n"; b.display(cout);//测试pop_back函数 miniVectorc=b; cout<<"对象c复制了对象b后b中的元素: \n"; c.display(cout);//测试=重载函数 cout<<"对象c数组最后一个元素的值: "< //测试back函数 cout<<"如果c数组为空则输出1: \n"; cout< cout<<"b数组的元素个数为: "< cout<<"b数组的容量为: "< b[15]=a[3];//测试下标运算符重载,越界报错 cout< } ●测试结果
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 最新 实验 报告 miniVector