数据结构1—向量

#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
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值