1.ADT支持的操作接口
操作接口 | 功能 | 适用对象 |
---|---|---|
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() | 遍历向量并统一处理所有元素,处理方法由函数对象指定 | 向量 |
向量模板类
#include <iostream>
typedef int Rank; //秩
#define DEFAULT_CAPACITY 3 //默认初始容量
template <typename T> class Vector{ //向量模板类
public:
Rank _size; int _capacity; T* _elem; //规模、容量、数据区
void copyFrom (T const* A, Rank lo, Rank hi); //复制数组区间A[lo, hi)
void expand(); //空间不足时扩容
void shrink(); //装填因子过小时压缩
Rank max (Rank lo, Rank hi); //选取最大元素
bool bubble (Rank lo, Rank hi);
void bubbleSort (Rank lo, Rank hi);
void selectionSort (Rank lo, Rank hi); //选择排序算法
void merge(Rank lo, Rank mi, Rank hi); //归并算法
void mergeSort(Rank lo, Rank hi); //归并排序算法
//public:
//构造函数 在内部维护一个数组_elem[]来储存元素
Vector (int c = DEFAULT_CAPACITY, int s = 0, T v = 0) {//容量为c、规模为s、所有元素初始为v