#pragma once
#include <iostream>
#include <cassert>
using namespace std;
#include <iostream>
#include <cassert>
using namespace std;
/*
.hpp文件简介:
本质:将.cpp的实现代码混入.h头文件当中,定义与实现都包含在同一文件,
则该类的调用者只需要include该.hpp文件即可,无需再将cpp加入到project中进行编译。
而实现代码将直接编译到调用者的obj文件中,不在生成单独的obj,采用hpp将大幅减少调用project中的cpp文件数与编译次数,
也不用发布动态库和静态库,非常适合用来编写公用的开源库。
注意事项:
1.是Header Plus Plus的简写(.h和.hpp就如同.c和.cpp似的)
2.与.h类似,.hpp是c++程序头文件格式
3.是VCL专用的头文件,是一般模板类的头文件,已预编译
4.hpp文件中不可以使用using namespace std;
5.不可包含全局对象和全局函数,被多个调用者include时会有链接错误,可以将全局函数封装为类的静态方法,全局对象必须去除。
*/
/*
*向量知识简单介绍:
1)向量是属于线线性表的线性存储结构,其特点为物理上相邻的两个元素,在逻辑上也相邻.
2)向量中的秩(下标索引)即代表了逻辑上的位置,也代表了物理上的位置.
程序说明:
1)所有与范围相关输入都是[lo,hi);
*/
//向量模板类
template <typename T,typename Rank=int>
class Vector
{
protected:
Rank _size; Rank _capacity; T *_elem;//有效元素、容量、数据区
void copyFrom(T const *A,Rank lo,Rank hi);//复制向量区间A[lo,hi]
void expand();//空间不足时扩容
void shrink();//装填因子过小时压缩
Rank binSerach(T const &e, Rank lo, Rank hi);
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 s = 0, T v = 0);//容量为c=s<<1,规模为s,所有元素初始为v
Vector(T const *A, Rank n);//数组整体复制
Vector(T const *A,Rank lo,Rank hi);//数组区间复制
Vector(Vector<T, Rank> const &V);//向量整体复制
Vector(Vector<T, Rank> const &V, Rank lo, Rank hi);//向量区间复制
virtual ~Vector() {delete[]_elem; }//释放内部空间
//只读访问接口
Rank size() const { return _size; }//规模
bool empty() const { return !_size; }//判空
Rank 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
数据结构1—向量
最新推荐文章于 2024-04-21 23:15:00 发布