DSA学习笔记——向量2(构造函数、扩容缩容)

1、基于复制的构造方法

复制构造函数的多个重载,都是基于copyFrom()实现的:

template <typename T>
void Vector<T>::copyFrom(T const* A, Rank lo, Rank hi){
	_elem = new T[_capacity = 2 * (hi - lo)]; _size = 0;
	while(lo < hi)
		_elem[_size++] = A[lo++];
}

赋值运算符重载:

template <typename T>
Vector<T>& Vector<T>::operator=(Vector<T> const& V){
	if(_elem) delete []_elem;
	copyFrom(V._elem, 0, V.size());
	return *this;
}

2、扩容、缩容

注意:扩容和缩容的分摊时间复杂度都是O(1),在不是对单次操作敏感的情况下,保证了向量内部空间的高效利用。

template <typename T>
void Vector<T>::expand(){
	if(_size < _capacity) return;
	if(_capacity < DEFAULT_CAPACITY) _capacity = DEFAULT_CAPACITY;
	T* oldElem = _elem; _elem = new T[_capacity <<= 1];
	for(int i = 0; i < _size; i ++)
		_elem[i] = oldElem[i];
	delete []oldElem;
}
template <typename T>
void Vector<T>::shrink(){
	if(_capacity < DEFAULT_CAPACITY << 1) return;
	if(_size << 2 > _capacity) return;
	T* oldElem = _elem;
	_elem = new T[_capacity >>= 1];
	for(int i = 0; i < _size; i ++)
		_elem[i] = oldElem[i];
	delete []oldElem;
}
发布了23 篇原创文章 · 获赞 0 · 访问量 1264

猜你喜欢

转载自blog.csdn.net/Nemoosi/article/details/104604639
今日推荐