数据结构与算法学习1.1:数据结构之向量(C++语言实现)

本文介绍了如何使用C++实现动态数组,即向量类(Vector)。内容包括向量类的设计思想、模板类的声明与定义,以及插入、删除和遍历元素等操作的实现。特别强调了在实现过程中遇到的C++语言陷阱,如函数对象引用的问题,并提供了修正方法。
摘要由CSDN通过智能技术生成

学习书籍:数据结构(C++语言版) 邓俊辉
环境:Win10 VS2017
注意事项:
1.模板类成员函数的声明和定义都放在头文件中。
2.头文件中尽可能不使用using namespace std;引入名称空间类似操作。

代码会与邓俊辉老师的有略微不同之处,自己去写总会踩到一些C++语言的坑,同时当做C++的学习,代码都是检查过可运行的,可以直接使用,若存在BUG请及时指正错误。

在定义数组的时候必须指定数组的大小,但有时我们并不知道需要一个多大的数组,如果准备的空间比我们所需要的大就会造成浪费,如果小则空间不足。所以我们需要一个动态数组,而C++是面向对象的语言,所以我们可以把动态数组及其常用操作封装成一个类,只向外提供接口,这就是要学习的向量类——Vector。
为了让我们制作的Vector可以反复的,多情况下进行使用,我们把Vector类做成一个模板类。

首先定义这个Vector模板类
其中重点声明:lo与hi的含义
lo:首元素的秩(位置)
hi:尾元素后一个的秩序
例如1 2 3 4中若lo为1的秩,hi即为4之后元素的位置,hi为一哨兵

具体示意如下:
在这里插入图片描述

/*元素的秩  即元素位置*/
typedef int Rank;  //using Rank = int;
#define DEFALUT_CAPACITY 6 //constexpr int DEFALUT_CAPACITY=6 向量默认初始容量
/*
该类基本的成员
包括成员变量 以及构造函数,拷贝构造函数等
*/
template <class T> 
class Vector
{
   
protected:
	Rank _size; //规模
	int capacity; //容量 
	T* elem; //数据区 即封装起来的动态数组
	void copyFrom(const T* A, Rank lo, Rank hi);//复制
	void expand();//向量扩容
	int max(int a, int b) {
    return a > b ? a : b; }
public:
	//构造函数
	Vector(int c = DEFALUT_CAPACITY) 
	{
   
		elem = new T[capacity = c];
		_size = 0;
	}
   //拷贝构造函数
	Vector(const T* A, Rank lo, Rank hi) //数组区间复制
	{
   
		copyFrom(A, lo, hi);
	}

	Vector(const Vector<T> & V,Rank lo,Rank hi)//向量区间复制
	{
   
		copyFrom(V.elem, lo, hi);
	}
	
	Vector(const Vector<T> & V)//向量整体复制
	{
   
		copyFrom(V.elem, 0, V._size);
	}

	//析构函数 释
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值