1.前言
下面来看看数据结构中最基础的向量的接口与实现
向量与数组类似,是一种线性数据结构,最基本的遍历向量的方式是寻秩访问,秩即向量每个元素的序号
下面我们用c++的语法定义向量的接口,并依次实现。在这里为了方便小白来看,我定义了只能装整数的向量。为了提高兼容性,可以参考范型程序设计的方法
例如:
template <typename T>
class Vector{
}
通过这种方式,向量内的元素可以是整数、浮点数,也可以是类、数组等
2.向量接口定义
#ifndef VECTOR_VECTOR_H
#define VECTOR_VECTOR_H
class Vector{
private:
int _size; //向量元素个数
int _capacity; //向量容量
int *_elem; //指向元素的指针
public:
Vector(int v = 10) //构造函数,默认初始元素个数为10
{
_elem = new int[_capacity = v]; _size = 0;};
~Vector() //析构函数
{
delete _elem; };
Vector(Vector const &v); //复制构造函数
//针对一般向量的函数接口
int size(); //报告向量元素规模
int get(int r); //获取序号为r的元素
void put(int r, int e); //用e替换r元素
void expand(); //扩充向量规模
void insert(int r, int e); //插入e元素,后继元素依此后移
int remove(int r); //删除序号为r的元素并返回
int remove(int lo, int hi); //区间删除,返回删除的区间长度
int find(int e, int lo, int hi); //查找元素e,返回序号
void deduplicated(); //删除重复元素
int & operator[](int r); //重载下标运算符
void bubblesort(int lo, int hi); //向量元素冒泡排序
void mergesort(int lo, int hi); //向量元素归并排序
void merge(int lo, int mi, int hi);
//针对有序向量的函数接口
int disordered() const; //判断向量是否有序
int uniquify(); //有序向量去重,返回重复元素的个数
int binsearch(int *s, int const &e, int lo