1 顺序查找
template <typename T> rank vector <T> ::find(T const &e ,rank lo,rank hi){
while((lo<hi--)&&(e!=_elem[hi]));
return hi;
}
最坏情况下的时间复杂度为,最好情况下为.
对于规模相同,内部组成不同的输入,渐进运行时间却有本质的区别,故此类算法也称作输入敏感的算法。
2 插入
template<typename T> rank vector<T> :: insert(rank r,T const &e){
expend();
for(rank i=_size;i>r;i--) _elem[i]=_elem[i-1];
_elem[r]=e; _size++;
return r;
}
3 删除
区间删除
template<typename T> rank vector<T> :: remove(rank lo,rank hi){
if(lo==hi) return 0;
while (hi<_size) _elem[lo++]=_elem[hi++]; // [hi,_size)顺次前移hi-lo个单元
_size=lo;
shrink(); //若有必要,则缩容
return hi-lo;}
单元数删除
template<typename T> T vector<T> ::remove1(rank r){
T e=_elem[r];
remove(r,r+1);
return e;}
最坏情况下的时间复杂度为,最好情况下为.
4 唯一化
template<typename T> int vector<T> ::deduplicate(){
int oldsize=_size;
rank i=1;
while(i<_size)
(find(_elem[i],0,i)<0) ? i++:remove(i);
return oldsize-_size;
}