C++数据结构学习笔记(五)

本文探讨了C++中的向量数据结构,它是数组的抽象,提供了方便的元素管理和操作。向量允许存储不同类型的元素,并支持size()、get()、put()、insert()、remove()等操作。此外,文章还提到了Vector模板类的实现,包括构造函数、拷贝构造函数以及内存管理中的静态空间管理问题,如上溢和下溢。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

从数组到向量

向量是数组的抽象和泛化,由一组元素按照线性次序封装而成

各元素[0,n)内的秩一一对应 //循秩访问

元素的类型不限于基本类型

操作,管理更加简化,统一和安全

可以更为便捷的参与复杂数据结构的定制与实现


向量ADT接口

size() 报告当前规模

get(r) 获取秩为r的元素

put(r,e) 用e替换秩为r元素的数值

insert(r,e) e作为秩为r元素插入,原后继元素依次后移

remove(r) 删除秩为r的元素,返回该元素中原存放的对象

uniquify() 去重


Vector模板类

typedef int Rank;

#define DEFAULT_CAPACITY 3

template <typename T> class Vector

{

private:Rank _size; int _capacity; T* _elem;

pritected:

//内部函数

public:

//构造

//析构

//只读接口

//可写接口

//遍历接口

}


Vector(int c=DEFAULT_CAPACITY)

{

_elem = new T[_capacity = c];

size = 0;

}

Vector(T const *A,Rank lo,Rank hi)

{

copyFrom(A,lo,hi); //数组区间复制

}

Vector(Vector<T>const &V,Rank lo,Rank hi)

{

copyFrom(V._elem,lo,hi); //向量区间复制

}


template<typename T> //T为基本类型,或已经重载‘=’

void Vector<T>::copyFrom(T* const A,Rank lo,Rank hi)

{

_elem = new T[_capacity = 2*(hi-lo)];//分配空间

_size = 0;//规模清0

while(lo<hi)

_elem[_size++]=A[lo++];//复制到_elem[0,hi-lo]

}


静态空间管理的不足

上溢:_elem[]不足存放所以元素

下溢 :_size/_capacity<<0.5





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值