最新实验报告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;aif(vArr[a]==k)
{
exist=true;
intflag=a;
for(inty=flag;yvArr[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;ivArr[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;ivArr[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;aif(vArr[a]==k)
{
exist=true;
intflag=a;
for(inty=flag;yvArr[y]=vArr[y+1];
vSize--;
}
if(!
exist)cout<<"NOExisting\n";
}
//display.cpp
//输出数组中的所有元素
#include"miniVector.h"
usingnamespacestd;
voidminiVector:
:
display(ostream&out)
{
for(inti=0;iout<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;ivArr[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;inewArr[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<}
●测试结果