当前位置: 首页 > news >正文

vector模拟实现(2)

1.构造函数

2.拷贝构造

我们利用push_back和reserve来实现拷贝构造。

3.迭代器的实现

由于底层是一段连续的空间,所以我们选择用指针来实现迭代器。

4.swap

这里的swap函数是有两种方法,一种是开辟一段新的空间,然后memcpy来把原来的数据拷贝过去,底层思路是2个数字交换,所以第二种方法是直接利用库中给的swap来实现交换。

注:这里把原来的size大小记住的原因是x的空间被替代之后,它的_finish位置不好确认,所以先确定它的size。

5.reserve

这里是也是利用先开辟一段新的空间,记住它的old_size然后利用memcpy拷贝过去,之所以乘以sizeof(T)是因为memcpy是按字节拷贝的。其次也可以利用push_back来直接循环替代开辟新空间的做法。

5.size和capacity

这里之所以返回_end-_start是因为地址之间相减是返回它们之间的元素个数。

6.push_back

实现push_back主体思路是空间不够开空间,令_finish赋值然后++即可。

7. insert

insert的实现是先找到pos的位置,然后计算pos位置之后还有几个值,然后把所有的值往后移动一位,最后令pos位置等于x即可,这里返回iterator时为了防止迭代器失效的问题。

8.pop_back

尾删的实现思路比较简单,直接令_finish--即可。

9.[]运算符的重载

主要实现了const和非const的两种[],成员函数左边加const主要是承诺不会对类中的成员变量进行修改,返回值加const是保证返回值不会被修改。返回_start+n是利用了解引用。

9.赋值运算符重载

这里的赋值运算符感觉比较巧妙,先利用传值传参,传值传参要先进行拷贝构造,然后利用刚刚实现的swap函数,由于swap是成员函数,所以有隐藏的this指针,不需再次传参,只需要把v输入,由于v是利用拷贝构造的变量,出栈时会自动调用析构函数进行销毁,这里可以理解一点什么叫传值传参要先进行拷贝构造了,这是和传实参和传形参是相似的,传形参不影响实参。

相关文章:

  • 蓝桥杯2024年第十五届省赛真题-拔河
  • 专栏:区块链入门到放弃查看目录
  • el-tabs添加按钮增加点击禁止样式
  • ubuntu 配置固定ip
  • getline(cin, )
  • Qt音频输出:QAudioOutput详解与示例
  • 玄机-apache日志分析
  • PDF预览-搜索并高亮文本
  • 基于OpenXLSX库创建的CAPL中可用的解析xlsx文件的DLL
  • traefik k3s配置
  • MongoDB基础知识
  • 页游(弹弹堂)刷怪脚本教程(一)---大漠插件制作颜色变化的字体字库(按键精灵)
  • Java项目之基于ssm的个性化旅游攻略定制系统(源码+文档)
  • http://noi.openjudge.cn/_2.5基本算法之搜索_1804:小游戏
  • 实验室预约|实验室预约小程序|基于Java+vue微信小程序的实验室预约管理系统设计与实现(源码+数据库+文档)
  • JMeter接口性能测试从入门到精通
  • FreeCAD傻瓜教程-钣金工作台SheetMetal的安装和简单使用
  • AIP-214 资源过期
  • Green Coding规范:从循环语句到数据库查询的节能写法
  • 如何在idea中新建一个项目
  • 怎么做网络棋牌网站/南京seo排名收费
  • 北京英文网站建设/高端网站建设公司哪家好
  • c web网站开发框架/百度怎么打广告
  • wordpress可以做什么站/推销网站
  • 平面设计和网页设计哪个工资高/衡阳seo排名
  • 电子网站模板/天津百度关键词推广公司