1.算法进阶——Vector底层原理与倍增扩容方法 详解

本文详细介绍了C++ STL中vector的倍增扩容方法,通过实例展示了size和capacity如何线性和倍增变化。分析了为什么选择倍增策略,以及与静态数组的比较,指出理想的扩容倍增率接近1.618,而在Java的ArrayList中实际值为1.5。
摘要由CSDN通过智能技术生成

开新专栏啦,该系列是 极客时间-黄清昊-算法实战高手课 的学习笔记,以此为媒介深挖我们之前提到但没展开的内容。希望大家一起学习,一起进步。

回顾

我们在之前的内容,分享过vector作为顺序容器的一部分内容:
c++stl
我把之前的内容挪一部分来:
动态数组,用于 O(1) 的随机读取.
实现原理:
由三个指针实现,
第一个指针指向vector起始位置
第二个指针指向目前有数据的末尾
第三个指针指向整个vector容器所占内存的末尾。
在这里插入图片描述
由此实现:

template<class _Ty,
    class _Ax>
    class vector
        : public _Vector_val<_Ty, _Ax>
    {
      // varying size array of values
public:
    /********/
protected:
    pointer _Myfirst;   // pointer to beginning of array
    pointer _Mylast;    // pointer to current end of sequence
    pointer _Myend; // pointer to end of array
    };

由此:
注意:
end 指向第二个指针
size 是2-1 而capacity 是3-1(不懂的话举个例子,水杯里有半杯水,半杯水是其size,而一杯水是其capacity)
注意resize的时候,是新在堆中开辟内存,赋值之后删除旧数组

template <class _Ty, class _Alloc = allocator<_Ty>>
class vector{
   
public:
    iterator begin() {
   return _Myfirst;}
    iterator end() {
   return _Mylast;}
    size_type size() const {
   return size_type(end() - begin());}
    size_type capacity() const {
   return size_type(_Myend - begin());}
    bool empty() const {
   
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值