




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第C++详解如何实现动态数组目录动态数组示例代码运行环境运行效果
动态数组
动态数组Vector可以动态扩展内存,其采用连续的内存空间,当内存空间不足,便以原来的容量的2倍或者1.5倍成倍的扩展,将原有的数组元素拷贝到新分配的内存空间中,释放原有的内存空间,新的元素将存入的新分配的内存空间。
示例代码
动态数组vector的size函数和capacity函数,分别作为求数组中现有的元素的个数和数组所能容纳的元素的个数。下面直接上实现的代码。
DynamicArray.h
#pragmaonce
classDynamicArray{
public:
DynamicArray();
~DynamicArray();
voidpush_back_Array(intvalue);
voidinsertValueByPosArray(size_tpos,intvalue);
voidremoveByValueFromArray(intvalue);
voidremoveByPosFromArray(size_tpos);
intfindPosByValueArray(intvalue);
intfindValueByPosArray(size_tpos);
voidreclaimSpaceArray();
voidclearArray();
intgetCapacity();
intgetCount();
voidprintArray();
private:
int*m_pArr;
size_tm_size;
size_tm_capacity;
DynamicArray.cpp
#include"DynamicArray.h"
#includeiostream
usingnamespacestd;
//DynamicArray.cpp
DynamicArray::DynamicArray()
m_size=0;
m_capacity=20;
m_pArr=newint[m_capacity];
if(m_pArr==nullptr)
cout"new开辟空间失败"endl;
DynamicArray::~DynamicArray()
if(m_pArr!=nullptr)
delete[]m_pArr;
m_pArr=nullptr;
m_size=0;
m_capacity=0;
voidDynamicArray::push_back_Array(intvalue)//push_back
if(m_pArr==nullptr)
return;
reclaimSpaceArray();
m_pArr[m_size]=value;
m_size++;
voidDynamicArray::insertValueByPosArray(size_tpos,intvalue)//插入insert(可以在前,中,后插入)
if(m_pArr==nullptr)
return;
reclaimSpaceArray();
for(size_ti=m_size-1;i=pos;--i)//pos为下标的数,从0开始
m_pArr[i+1]=m_pArr[i];
m_pArr[pos]=value;
m_size++;
voidDynamicArray::removeByValueFromArray(intvalue)
if(m_pArr==nullptr)
return;
intnPos=findPosByValueArray(value);
removeByPosFromArray(nPos);
voidDynamicArray::removeByPosFromArray(size_tpos)//pos为下标的数,从0开始
if(m_pArr==nullptr)
return;
if(pos0||pos=m_size)//pos的最大值为m_size-1
return;
//找到被删除位置的下一位
for(size_ti=pos+1;im_size;++i)
m_pArr[i-1]=m_pArr[i];
m_size--;
intDynamicArray::findPosByValueArray(intvalue)
size_tnPos=-1;
if(m_pArr==nullptr)
returnnPos;
for(size_ti=0;im_size;++i)
if(m_pArr[i]==value)
nPos=i;
break;
returnnPos;
intDynamicArray::findValueByPosArray(size_tpos)
if(m_pArr==nullptr)
return-1;
if(pos0||pos=m_size)
return-1;
returnm_pArr[pos];
voidDynamicArray::reclaimSpaceArray()
if(m_size==m_capacity)
int*newArr=newint[m_capacity*2];
if(newArr==nullptr)
cout"new开辟空间失败"endl;
return;
memset(newArr,0,m_capacity*2*sizeof(int));//第三个参数为字节数
memcpy(newArr,m_pArr,m_size*sizeof(int));//第三个参数为字节数
//下面这种逐个赋值的方式也可以使用
//for(size_ti=0;im_capacity;i++)
//newArr[i]=m_pArr[i];
m_capacity=m_capacity*2;
if(m_pArr){
delete[]m_pArr;
m_pArr=nullptr;
m_pArr=newArr;
voidDynamicArray::clearArray()//vector中clear()只是改变size的大小
m_size=0;
intDynamicArray::getCapacity()
returnm_capacity;
intDynamicArray::getCount()
returnm_size;
voidDynamicArray::printArray()
for(size_ti=0;im_size;++i)
//下面两种方式打印都可以
coutm_pArr[i]"";
//intret=findValueByPosArray(i);
//coutret"";
coutendl;
}
main.cpp
#includeiostream
#include"DynamicArray.h"
usingnamespacestd;
voidtest(){
DynamicArray*pArray=newDynamicArray;
inti=0;
while(i++11)
pArray-push_back_Array(i);
pArray-printArray();
cout"size="pArray-getCount()endl;
cout"容量:"pArray-getCapacity()endl;
pArray-insertValueByPosArray(5,12);
pArray-printArray();
cout"insertaftersize="pArray-getCount()endl;
cout"insertafter容量:"pArray-getCapacity()endl;
pArray-removeByValueFromArray(2);
pArray-printArray();
cout"removeaftersize="pArray-getCount()endl;
cout"removeafter容量:"pArray-getCapacity()endl;
pArray-removeByPosFromArray(3);
pArray-printArray();
cout"removebyposaftersize="pArray-getCount()endl;
cout"removebyposafter容量:"pArray-getCapacity()endl;
cout"find2ofpos:"pArray-findPosByValueArray(2)endl;
cout"find8ofpos:"pArray-findPosByValueArray(8)endl;
cout"valueatposof6:"pArray-findValueByPosArray(6)endl;
pArray-clearArray();
cout"size="pArray-
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 中药染发店转让合同范例
- 中介房屋补充合同范例
- 电力设施施工安全预防措施
- 零售业顾客安全与质量提升工作计划
- 全款房购房合同范例
- 小学三年级心理健康教育工作计划
- 企业装修补充合同范例
- 小学一年级数学考试成绩分析总结范文
- 2025年内分泌科护士长绩效考核计划
- 小学计算机基础教育计划
- 江苏省南京市秦淮区2023-2024学年八年级下学期历史期末测试卷
- 2024年甘肃省中考语文试题卷(含答案)
- 中央2024年文化和旅游部恭王府博物馆应届生招聘笔试上岸历年典型考题与考点剖析附带答案详解
- 劳动教育智慧树知到期末考试答案章节答案2024年同济大学
- 第一单元中国特色社会主义的开创、坚持、捍卫和发展单元测试-2023-2024学年中职高教版(2023)中国特色社会主义
- MOOC 倾听-音乐的形式与审美-武汉大学 中国大学慕课答案
- 第18讲化学键(讲义)(原卷版+解析)
- (正式版)JBT 7248-2024 阀门用低温钢铸件技术规范
- 浆砌片石挡墙施工方案
- (高清版)TDT 1056-2019 县级国土资源调查生产成本定额
- 多臂老虎机问题的强化学习算法
评论
0/150
提交评论