Vector底层代码原理实现

本文详细探讨了Vector的底层代码实现,包括如何定义初始结构,以及与容量相关的操作如size()、capacity()、reserve()、resize()、push_back()和pop_back()。在介绍中,特别强调了在调整容量时如何处理数据迁移和指针更新的过程。
摘要由CSDN通过智能技术生成

定义初始结构:

vector定义了三个指针start(表示目前使用空间的头)、finish(表示目前使用空间的尾)、end_of_storage(表示目前可用空间的尾)。

template <class T>
class vector
{
public:
    ~vector()
    {
        delete _start;
        _start = _finish = _end_of_storage = nullptr;
    }
private:
    T* _start;         //顺序表的头
    T* _finish;        //顺序表有效长度位置
    T* _end_of_storage; //顺序表末尾
};

容量有关操作:

1.获取有效数据大小size()

想要获取size,该怎么实现呢?我们在定义初始结构的时候,已经知道其底层是利用的三个指针,所以size等于_finish - _start.

size_t size() const    //加const是保证const对象也可以用
{
    return _finish - _start;
}

2.获取数据容量capacity()

size_t capacity() //加const是保证const对象也可以用
{
    return _end_of_storage - _start;
}

3.增加容量reserve()

首先判断请求的空间大小是否超过现有空间大小。然后是则进行一系列处理:

  1. 开辟新空间
  2. 将原有空间的数据一一移动到新空间上
  3. 释放原有空间
  4. 将三个指针重置

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

我是纠结伦

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值