发布时间:2025-06-24 09:13:53  作者:北方职教升学中心  阅读量:940


pop_back

  • vector——默认成员函数
  • vector——运算符重载
  • vector——插入和删除函数
  • vector——实现过程的问题
    • 迭代器失效
    • memcpy的浅拷贝问题
  • 总结
  • 前言

    上篇博客我们已经详细介绍了vector 以及它的各种函数还有使用方法
    了解这一流程我们已经过去啦,下面就是自己模拟实现一下我们的vector
    在模拟实现vector过程中,还是有很多细节要处理的
    ‘话不多说 fellow me

    vector——基本模型

    首先就是自定义一个vector类,我们把它放在自定义的空间命名域,然后给定相应的成员以及函数,像默认成员函数,还有自定义变量
    构造函数,拷贝构造,析构函数,在实现这些函数前,我们先来实现一些前置函数,能让这些默认成员复用

    下面是vector最初始的样子,只有自定义成员变量

    namespacexxx{template<classT>classvector{public:typedefT*iterator;//  因为vector 会支持迭代器访问,所以我们这里定义 T*  private:iterator _start =nullptr;//  _start  ,  _finish  相当于vector的开头和末尾的指针iterator _finish =nullptr;iterator _end_of_storage =nullptr;// 这个带表边界  vector的容量边界};}

    vector——迭代器模拟实现

    vector支持迭代器访问,我们先来简单实现一下迭代器

    // 指向数据不能修改,本身可以修改typedefconstT*const_iterator;//  普通迭代器和const迭代器  iterator begin(){return_start;}iterator end(){return_finish;}const_iterator begin()const{return_start;}const_iterator end()const{return_finish;}

    vector——容量函数以及push_back、 解决方式:在以上操作完成之后,如果想要继续通过迭代器操作vector中的元素,只需给it重新赋值即可。
    下面的链接是完全体的vector模拟实现,大家有兴趣可以看看,在 vector.h 文件中
    vector

    总结

    在模拟实现vector过程中,使用了 size_t 和 int 版本的 构造函数,避免了负数隐式转换的风险,确保类型安全
    在实现赋值重载时,通过复用库函数的swap,通过 swap 交换资源,避免手动管理内存
    在迭代器失效方面,深究文档,慢慢找出解决的办法,迭代器失效还是能处理的
    最后就是memcpy是浅拷贝,要注意memcpy的使用场景,注意内存的多次析构问题和泄漏
    模拟实现下来,还是发现了很多问题的,慢慢解决出现的问题,慢慢提升自己的debug能力,加油
    今天就到这里啦,不要走开,小编持续更新中~~~~

    在这里插入图片描述