【C++ 初阶】vecotr底层框架模拟实现

目录

  • 一、前言
  • 二、vecotr框架搭建
    • 1. vector介绍
    • 2. 框架
    • 3. 构造函数
    • 4. 拷贝构造
    • 5. 赋值重载
    • 6. 迭代器函数
    • 7. size和capacity
    • 8. 扩容
    • 9. pushback和popback
    • 10. 插入和删除指定位置数据
    • 11. 通过下标访问
  • 三、完整代码

一、前言

vector源代码看了一下过于复杂,这里取其精华把大体的框架和重要函数罗列出来并分析实现


二、vecotr框架搭建

【C++ 初阶】vecotr底层框架模拟实现_第1张图片
在实现vector前需要弄明白这幅图,与string相似也会记录size和capacity的大小
在这个数组中,有三个指针分别指向起始位置start,数据结束位置finish以及空间容量的末尾end_of_storage位置,剩余空间备用,如果增加的数据超过capacity,则需要进行增容

1. vector介绍

1. vector是大小可变的数组序列容器

2. 和数组一样,空间上是连续存储

3. 使用动态分配数组存储元素;增容时,并不会每次都重新分配大小,而是分配一些额外的空间以适应可能的增长(finish和endofstorage之间)。
vector占用了更多的存储空间,为了获得管理存储空间的能力,并且以一种有效的方式动态增长。

4. 与其它动态序列容器相比(deques, lists and forward_lists), vector在访问元素的时候更加高效,在末尾添加和删除元素相对高效。
对于其它不在末尾的删除和插入操作,效率更低。比起lists和forward_lists统一的迭代器和引用更好。

2. 框架

下面为vector的大体框架,和顺序表也很类似实现了增删查改

namespace vectorSimu{
   
    template<class T>
    class vector{
   
        public:
            typedef T* iterator;
            iterator begin();
            iterator end();

            //默认成员函数
            vector();
            vecotr(size_t n, const T& val);
            vector(const vector<T>& val); //拷贝构造

            //大小和rongliang
            size_t size();
            size_t capacity();

            //扩容
            void reserve(size_t n);
            void resize(size_t n, const T& val = T());

            //读取容器信息
            T& operator[](size_t pos);

            //修改与删除
            void push_back(const T& val);
            void pop_back();
            void insert(iterator pos, const T& val);
            iterator erase(iterator pos);
            void swap(vector<T>& v);

            //析构
            ~vector();
        private:
            iterator _start;
            iterator _finish;
            iterator _endofstorage;
    };
}

3. 构造函数

构造一个不带参的函数,将其成员置为nullptr

vector()
: _start(nu

你可能感兴趣的:(C++,数据结构)