动态数组C++实现方法(分享)
回顾大二的数据结构知识。从数组开始。实现了一个可自动扩充容量的泛型数组。
头文件:Array.h
#ifndefArray_hpp #defineArray_hpp templateclassArray{ private: T*base;//数组首地址 intlength;//数组中元素 intsize;//数组大小,以数组中元素的大小为单位 public: //初始化数组,分配内存 boolinit(); //检查内存是否够用,不够用就增加 boolensureCapcity(); //添加元素到数组尾 booladd(Titem); //插入元素到数组的具体位置,位置从1开始 boolinsert(intindex,Titem); //删除指定位置的元素并返回,位置从1开始 Tdel(intindex); //返回指定位置的元素 TobjectAt(intindex); //打印数组所有元素 voiddisplay(); }; #endif/*Array_hpp*/
实现:Array.cpp
#include"Array.hpp" #include#include usingnamespacestd; template boolArray ::init(){ base=(T*)malloc(10*sizeof(T)); if(!base){ returnfalse; } size=10; length=0; returntrue; } template boolArray ::ensureCapcity(){ if(length>=size){ T*newBase=(T*)realloc(base,10*sizeof(T)+size); if(!newBase){ returnfalse; } base=newBase; size+=10; newBase=nullptr; } returntrue; } template boolArray ::add(Titem){ if(!ensureCapcity()){ returnfalse; } T*p=base+length; *p=item; length++; returntrue; } template boolArray ::insert(intindex,constTitem){ if(!ensureCapcity()){ returnfalse; } if(index<1||index>length){ returnfalse; } T*q=base+index-1; T*p=base+length-1; while(p>=q){ *(p+1)=*p; p--; } *q=item; q=nullptr; p=nullptr; length++; returntrue; } template TArray ::del(intindex){ if(index<1||index>length){ returnNULL; } T*q=base+index-1; Titem=*q; ++q; T*p=base+length; while(q<=p){ *(q-1)=*q; ++q; } length--; returnitem; } template TArray ::objectAt(intindex){ if(index<1||index>length){ returnNULL; } T*q=base; return*(q+index-1); } template voidArray ::display(){ T*q=base; T*p=base+length-1; while(q<=p){ cout<<*(q++)<<""; } cout< 使用:
#include#include"Array.cpp" usingnamespacestd; intmain(intargc,constchar*argv[]){ Array array=*newArray ; array.init(); array.add(1); array.insert(1,2); array.objectAt(1); return0; } 以上这篇动态数组C++实现方法(分享)就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持毛票票。