最新实验报告miniVector.docx

上传人:b****2 文档编号:1609380 上传时间:2023-05-01 格式:DOCX 页数:13 大小:69KB
下载 相关 举报
最新实验报告miniVector.docx_第1页
第1页 / 共13页
最新实验报告miniVector.docx_第2页
第2页 / 共13页
最新实验报告miniVector.docx_第3页
第3页 / 共13页
最新实验报告miniVector.docx_第4页
第4页 / 共13页
最新实验报告miniVector.docx_第5页
第5页 / 共13页
最新实验报告miniVector.docx_第6页
第6页 / 共13页
最新实验报告miniVector.docx_第7页
第7页 / 共13页
最新实验报告miniVector.docx_第8页
第8页 / 共13页
最新实验报告miniVector.docx_第9页
第9页 / 共13页
最新实验报告miniVector.docx_第10页
第10页 / 共13页
最新实验报告miniVector.docx_第11页
第11页 / 共13页
最新实验报告miniVector.docx_第12页
第12页 / 共13页
最新实验报告miniVector.docx_第13页
第13页 / 共13页
亲,该文档总共13页,全部预览完了,如果喜欢就下载吧!
下载资源
资源描述

最新实验报告miniVector.docx

《最新实验报告miniVector.docx》由会员分享,可在线阅读,更多相关《最新实验报告miniVector.docx(13页珍藏版)》请在冰点文库上搜索。

最新实验报告miniVector.docx

最新实验报告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<

}

●测试结果

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 工作范文 > 行政公文

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2