向量ADT接口
ADT: Abstract Data Type
向量:线性数组的抽象和泛化,故不再限定向量中的各元素都属于同一基本类型。
寻秩访问:对于Vector来说,相当于数组中的元素下标。
| size() | 元素总数 | 向量 |
| get(r) | 获取秩为r的元素 | 向量 |
| put(r,e) | 用e替换秩为r的元素 | 向量 |
| insert(r,e) | e作为秩为r的元素插入,其他元素后移 | 向量 |
| remove(r) | 删除秩为r的元素 | 向量 |
| disordered() | 判断所有元素是否已按非降序排列 |
向量 |
| sort() | 非降序排列 | 向量 |
| find(e) | 查找等于e且秩最大的元素 | 向量 |
| search(e) | 查找e,返回不大于e且秩最大的元素 | 有序向量 |
| deduplicate() | 剔除重复元素 | 向量 |
| uniquify() | 剔除重复元素 | 有序向量 |
| traverse() | 遍历向量并统一处理所有元素,处理方法由函数对象指定 | 向量 |
Vector模板类:
typedef int Rank;
#define DEFAULT_CAPACITY 3template <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 cosnt& 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&);
};