//编写可变长整形数组类
#include<bits/stdc++.h>
using namespace std;
class carray{
int size;//数组元素的个数
int *ptr;//指向动态分配的数组
public:
carray(int s=0);//构造函数,s代表数组元素个数
carray(carray & a);//复制构造函数
~carray();//析构函数
void push_back(int v);//在数组尾部添加一个元素
int length(){//返回数组元素个数
return size;
}
int & carray::operator[](int i){
//用以支持根据下标访问数组元素
//如n=a[i]和a[i]=4;
return ptr[i];
}
};
int main(){
carray a;//开始时数组为空
for(int i=0;i<5;++i){
a.push_back(i);
}
carray a2,a3;
a2=a;
for(int i=0;i<a2.length();++i){
cout<<a2[i]<<" ";
}
a2=a3;
for(int i=0;i<a2.length();i++){
cout<<a2[i]<<" ";
}
cout<<endl;
a[3]=100;
carray a4(a);
for(int i=0;i<a4.length();i++){
cout<<a4[i]<<" ";
}
return 0;
}
carray::carray(int s):size(s){
if(s==0)
ptr=NULL;
else
ptr=new int[s];
}
carray::carray(carray & a){
if(!a.ptr){
ptr=NULL;
size=0;
return;
}
ptr=new int[a.size];
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size=a.size;
}
carray::~carray(){
if(ptr) delete []ptr;
}
carray & carray::operator=(const carray & a){
if(ptr==a.ptr)
return * this;
if(a.ptr==NULL){
if(ptr) delete [] ptr;
ptr=NULL;
size = 0;
return * this;
}
if(size<a.size){//如果原有空间足够大,就不用分配新的空间
if(ptr) delete []ptr;
ptr=new int [a.size];
}
memcpy(ptr,a.ptr,sizeof(int)*a.size);
size=a.size;
return *this;
}
void carray::push_back(int v){
if(ptr){
int *tmpptr=new int[size+1];//重新分配存储空间
memcpy(tmpptr,ptr,sizeof(int)*size);
delete []ptr;
ptr=tmpptr;
}
else
ptr=new int [1];
ptr[size++]=v;
}
可改变长度的数组
最新推荐文章于 2022-10-09 16:32:10 发布