我是这样想的:请看vector的初始化:
版本1:
SW_Vector<T>::SW_Vector(int n)//constructor, given size n
{
start=0;
finish=0;
end_of_storage=n;
data=new T(n);
}
版本2:
template<typename T>
SW_Vector<T>::SW_Vector(int n,const T& value)//constructor, given size n and the initializing value
{
fill_initialize(n,value);
}
plate<typename T>
void SW_Vector<T>::fill_initialize(int n, const T& value)//initializing and fill in the first value
{
start=0;//initializing
finish=1;
end_of_storage=n;
data=new T(n); //allocate
data[start]=value; //fill in
}
data是动态分配分配的!我们用data[0,n-1]来表示。我们再看push_back这个函数:
template<typename T>
void SW_Vector<T>::push_back(const T& x)//insert x at the end of the vector
{
if (!full())
{
data[finish++]=x;
}
else
{
int i;
T* new_data;
T* old_data;
old_data=data;
new_data=new T(2*size());
//copy the old values
for (i=start;i<finish;i++)
{
new_data[i]=data[i];
}
new_data[i]=x;
data=new_data;
finish++;
end_of_storage*=2;
//start remain the same
//delete
delete []old_data;
}
}
首先:data是需要delete的!push_back中的else部分是来处理空间不够的情况的!我先把old_data指向data,此时old_data便指向一个大小为n的空间。然后申请一个new_data指向一个两倍大的空间,然后进行复制。接着把data指向这个新申请的空间。然后需要delete原来data的空间,这片空间是用old_data来标记的,所以我就用了delete []old_data
以上是我的想法,我没有看出有什么错误。请你帮我指明!谢谢你!