Esempio n. 1
0
void Vec<T>::grow()
{
	//when growing ,allocate twice as much space as currently in use
	//策略,每次分配时,都分配双倍的空间,当然vec当前可能为空,因为我们可以选择一个元素的空间和已有空间的2倍来比较大小。
	//由于max的2个参数必须类型相同,所有我们显式构造了ptr_diff(1)
	size_type new_size=max(2*(limit-data),ptrdiff_t(1));

	/**
	 我们首先把要分配多少元素的空间保存在new_size中,接下来分配适当大小的空间,并且调用uninitialze_copy把当前空间的元素,复制到新
	 空间中,然后调用uncreate函数来释放原先的内存,最后我们重新设置指针的值。
	 **/
	iterator new_data=alloc.allocate(new_size);
	iterator new_avail=uninitialized_copy(data,avail,new_data);

	uncreate();

	//reset pointer
	data=new_data;
	avail=new_avail;
	limit=data+new_size;
}
Esempio n. 2
0
	~vec() { uncreate(); }
Esempio n. 3
0
void vec<T>::clear()
{
	uncreate(); // start from scratch
}
Esempio n. 4
0
	~Vec() { uncreate(); }