关于Vector模版类主要有以下注意点:
- 秩的概念:相当于数组的下标,从0开始计
- 将操作重载为对区间的和对整体的
- 下标操作的重载
- 函数指针和函数对象在遍历中的应用(C++中更推荐使用函数对象,详细见收藏)
typedef int Rank;
#define DEFAULT_CAPACITY 3
template <typename T> class Vector{
protected:
Rank _size; int _capacity; T* _elem;
void copyFrom(T const* A, Rank lo, Rank hi);
void expand();
void shrink();
bool bubble(Rank lo, Rank hi);
void bubbleSort(Rank lo, Rank hi);
Rank max(Rank lo, Rank hi);
void selectionSort(Rank lo, Rank hi);
void merge(Rank lo, Rank mi, Rank hi);
void mergeSort(Rank lo, Rank hi);
Rank partition(Rank lo, Rank hi);
void quickSort(Rank lo, Rank hi);
void heapSort(Rank lo, Rank hi);
public:
Vector(int c = DEFAULT_CAPACITY, int s = 0, T v = 0){_elem = new T[_capacity = c]; for(_size = 0; _size < s; _elem[_size++] = v);}
Vector(T const* A, Rank n){copyFrom(A, 0, n);}
Vector(T const* A, Rank lo, Rank hi){copyFrom(A, lo, hi);}
Vector(Vector<T> const& V){copyFrom(V._elem, 0, V._size);}
Vector(Vector<T> const& V, Rank lo, Rank hi){copyFrom(V._elem, lo, hi);}
~Vector(){delete []_elem;}
Rank size()const{return _size;}
bool empty()const{return !_size;}
int disordered()const;
Rank find(T const& e)const{return find(e, 0, _size);}
Rank find(T const& e, Rank lo, Rank hi)const;
Rank search(T const& e)const{return (0 >= _size) ? -1:search(e, 0, _size);}
Rank search(T const& e, Rank lo, Rank hi)const;
T& operator[](Rank r)const;
Vector<T>& operator=(Vector<T> const&);
T remove(Rank r);
int remove(Rank lo, Rank hi);
Rank insert(Rank r, T const& e);
Rank insert(T const& e){return insert(_size,e);}
void sort(Rank lo, Rank hi);
void sort(){sort(0, _size);}
void unsort(Rank lo, Rank hi);
void unsort(){unsort(0, _size);}
int deduplicate();
int uniquify();
void traverse(void (* ) (T&));
template <typename VST> void traverse(VST&);
}