用類模板實現(xiàn)可變長數(shù)組:
#include#includeusing namespace std;
templateclass CArray
{int size; //數(shù)組元素的個數(shù)
T *ptr; //指向動態(tài)分配的數(shù)組
public:
CArray(int s = 0); //s代表數(shù)組元素的個數(shù)
CArray(CArray & a);
~CArray();
void push_back(const T & v); //用于在數(shù)組尾部添加一個元素v
CArray & operator=(const CArray & a); //用于數(shù)組對象間的賦值
T length() {return size; }
T & operator[](int i)
{//用以支持根據(jù)下標訪問數(shù)組元素,如a[i] = 4;和n = a[i]這樣的語句
return ptr[i];
}
};
templateCArray::CArray(int s):size(s)
{ if(s == 0)
ptr = NULL;
else
ptr = new T[s];
}
templateCArray::CArray(CArray & a)
{if(!a.ptr) {ptr = NULL;
size = 0;
return;
}
ptr = new T[a.size];
memcpy(ptr, a.ptr, sizeof(T ) * a.size);
size = a.size;
}
templateCArray::~CArray()
{ if(ptr) delete [] ptr;
}
templateCArray& CArray::operator=(const CArray & a)
{//賦值號的作用是使"="左邊對象里存放的數(shù)組,大小和內(nèi)容都和右邊的對象一樣
if(this == & a) //防止a=a這樣的賦值導致出錯
return * this;
if(a.ptr == NULL) {//如果a里面的數(shù)組是空的
if( ptr )
delete [] ptr;
ptr = NULL;
size = 0;
return * this;
}
if(size< a.size) {//如果原有空間夠大,就不用分配新的空間
if(ptr)
delete [] ptr;
ptr = new T[a.size];
}
memcpy(ptr,a.ptr,sizeof(T)*a.size);
size = a.size;
return *this;
}
templatevoid CArray::push_back(const T & v)
{//在數(shù)組尾部添加一個元素
if(ptr) {T *tmpPtr = new T[size+1]; //重新分配空間
memcpy(tmpPtr,ptr,sizeof(T)*size); //拷貝原數(shù)組內(nèi)容
delete []ptr;
ptr = tmpPtr;
}
else //數(shù)組本來是空的
ptr = new T[1];
ptr[size++] = v; //加入新的數(shù)組元素
}
int main()
{CArraya;
for(int i = 0;i< 5;++i)
a.push_back(i);
for(int i = 0; i< a.length(); ++i)
cout<< a[i]<< " ";
return 0;
注意:push_back()函數(shù)的實現(xiàn),不是單純的在數(shù)組末尾+1,而是要從新申請空間,要不造成越界
你是否還在尋找穩(wěn)定的海外服務(wù)器提供商?創(chuàng)新互聯(lián)www.cdcxhl.cn海外機房具備T級流量清洗系統(tǒng)配攻擊溯源,準確流量調(diào)度確保服務(wù)器高可用性,企業(yè)級服務(wù)器適合批量采購,新人活動首月15元起,快前往官網(wǎng)查看詳情吧