C++详解如何实现动态数组_第1页
C++详解如何实现动态数组_第2页
C++详解如何实现动态数组_第3页
C++详解如何实现动态数组_第4页
C++详解如何实现动态数组_第5页
已阅读5页,还剩2页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第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. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论