1. 动态内存管理
1.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*=2];
for (int i = 0; i < _size; _elem[i] = oldElem[i++]);
delete [] oldElem;
}
1.2 缩容
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;
}
1.3 删除区间
template <typename T>
int Vector<T>::remove(Rank lo, Rank hi){
if (lo == hi) return 0;
while (hi < _size){
_elem[lo++] = _elem[hi++];
}
_size = lo;
shrink();
return hi - lo;
}
1.4 查找与去重