vector的模拟实现与迭代器失效
目录一简言二构造函数与析构函数1默认构造函数和拷贝构造函数2迭代器区间构造函数3填充构造函数4析构函数5构造时的匹配错误三赋值重载四迭代器相关函数五容量相关函数1空间大小与元素个数2改变容量reverse与数据个数resize3尾插和尾删4,reserve的缺陷与报错六访问与打印容器七迭代器失效一简言模拟实现vector全代码gitee链接https://gitee.com/codelsj-w/test9.15.git私有成员分析vector是C的一个泛型容器需要融入STL体系同时在构造函数等函数中迭代器经常被使用所以vector容器的私有成员可以使用迭代器实现。vector容器的私有成员变量主要由三部分构成vector也可以使用T* _data; size_t _size; size_t _capacitystring也可以使用迭代器不过string的迭代器使用的比较少二构造函数与析构函数泛型容器模版通过T可以让vector中存储任意类型的数据iterator实际就是数据类型指针补充解释const allocator_type alloc allocator_type()这一部分用来指定内存分配器allocator_type这是std::vector类内部的一个类型别名typedef。对于普通的std::vectorintallocator_type实际上就是std::allocatorint。表示按引用传参避免拷贝分配器对象分配器通常是无状态的但拷贝也有开销。const表示在构造函数内部不允许修改这个传入的分配器对象。alloc这是参数的名字。 allocator_type()这是默认参数。意思是如果你在创建vector时不传这个参数编译器会自动帮你构造一个默认的allocator_type对象即使用标准库默认的内存分配器在 C 中STL 容器如vector、list、map被设计为“内存分配”与“对象构造”分离。vector需要动态在堆上申请内存但它不直接用new和delete而是委托给分配器Allocator来做。默认场景下写std::vectorint v;时实际上等价于std::vectorint v(std::allocatorint());。这个默认分配器底层就是调用operator new和operator delete。只有对内存分配有特殊需求的场景下才会使用。1默认构造函数和拷贝构造函数默认构造作用创建一个空的 vector不包含任何元素size() 0capacity() 0。拷贝构造使用另一个同类型的 vectorx来创建一个新的 vector新 vector 包含x中所有元素的深拷贝。2迭代器区间构造函数核心利用迭代器区间[first, last)左闭右开来初始化 vector。它会将区间内的所有元素拷贝到新 vector 中。特点这是最灵活的构造函数。InputIterator可以是任何输入迭代器比如其他容器的迭代器、原生指针3填充构造函数作用创建包含n个元素的 vector每个元素的值都是val的拷贝。参数n要创建的元素个数。val每个元素的初始值。如果省略则使用值初始化对于int是 0对于自定义类会调用默认构造函数4析构函数5构造时的匹配错误三赋值重载两种写法传统写法reserve可以提前开辟空间防止在进行尾插时空间不够时多次进行空间的开辟。现代写法v1 v2 将v2传入拷贝构造一个新的vector容器v借助v容器进行交换原来的容器v2不会改变。四迭代器相关函数五容量相关函数1空间大小与元素个数2改变容量reverse与数据个数resizeresize的实现reverse的实现3尾插和尾删4,reserve的缺陷与报错预期的打印结果为五个相同的字符串但是报错了这是为什么呢根本原因在于深浅拷贝的问题六访问与打印容器访问打印容器容器模版七迭代器失效insert:在指定位置插入元素迭代器失效分析 erase:删除指定位置的元素结合实例分析失效:修改后使用这种方式上面的三种情况都不会出现错误补充模拟实现string类中的insert和erase迭代器函数也有可能造成迭代器失效的问题不过string的迭代器一般使用的很少八题目补充1只出现一次的数字class Solution { public: int singleNumber(vectorint nums) { int num1 0; //对数组当中的每个数的2进制位进行统计加和 for(int i 0;i32;i) { int total 0; for(int n : nums) { if((n i) 1 1) //如果是1就进行 { total; } } if(total % 3) //如果不是三的倍数说明答案的那一位是1 { num1 | (1i); } } return num1; } };解题思路1对数组当中的每个数的每一2进制位进行统计由于相同的数会出现三次不考虑答案这个数的话结果一定为3的倍数或者为0而这个数的这一位可能为0或1如果为1加上之后对3进行整除就会余1;如果是0加上之后对3进行整除就会余0余1的情况就表明答案这个数的这个二进制位为1通过| (1 i)加上即可2数组当中出现次数超过一半的数字

相关新闻

同城生活小程序开发:未开通业务入口怎么按配置隐藏

同城生活小程序开发:未开通业务入口怎么按配置隐藏

同城生活小程序首期只开外卖时,若首页仍展示跑腿、团购等未开通入口,用户点进去空白或报错,转化与信任双损。宜在配置层做业务开关,端上按开关渲染菜单,而不是改代码发版才能藏入口。本文用代码深讲说明配置模型、端侧…

2026/9/24 17:28:32 阅读更多 →
lu,震惊分析实验系统、震惊实验视频分析系统

lu,震惊分析实验系统、震惊实验视频分析系统

震惊反射系统用于分析动物受到突发强刺激后的应激行为,单台计算机可管控 1‑5 个震惊反应箱。除噪声刺激外,还可叠加光、电、气流组合刺激,刺激间隔技术参数1、重量传感器量程:1‑2kg 2、系统架构:主控制器搭配装置控制…

2026/9/24 17:27:31 阅读更多 →
2026 大幅面数码印刷设备行业观察:国产压电写真机技术演进与设备选型参考

2026 大幅面数码印刷设备行业观察:国产压电写真机技术演进与设备选型参考

本文面向广告加工、图文印刷行业从业者,梳理 2026 大幅面数码印刷设备的技术现状,包含压电写真、UV 打印技术拆解,以及工厂设备选型参考。 摘要:随着个性化小批量订单持续释放需求,国内大幅面数码印刷设备行业保持稳步…

2026/9/24 17:27:31 阅读更多 →

最新新闻

C# WinForms+OpenCvSharp实现实时图像与TCP检测结果同窗显示

C# WinForms+OpenCvSharp实现实时图像与TCP检测结果同窗显示

简介:针对相机无法通过SDK直接取图、只能从本地文件读取场景,这份C#工程源码提供了一套图像与通信联动的检测可视化方案。程序基于System.Drawing与System.Net.Sockets实现两路并行:定时扫描本地文件夹并实时绘制最新图像,同时监听…

2026/9/24 18:10:58 阅读更多 →
JavaWeb电子相册毕设项目:JSP+Servlet+JDBC+MySQL实战全解析

JavaWeb电子相册毕设项目:JSP+Servlet+JDBC+MySQL实战全解析

简介:这份基于JavaWeb的电子相册毕设项目,是一套完整的网络相册管理系统源码包,面向计算机相关专业准备毕业设计的学生及需要项目实战的Java初学者,可直接作为毕设使用。系统采用B/S结构,前台支持用户注册登录、网站介…

2026/9/24 18:10:58 阅读更多 →
基于Python和CNN的人脸表情识别课程设计全流程解析

基于Python和CNN的人脸表情识别课程设计全流程解析

简介:这是一份基于深度学习的人脸表情识别系统完整实现,面向高校课程设计、毕业设计及计算机视觉初学者,解决从数据集处理、模型训练到实时表情识别落地的全流程问题。压缩包共19个文件、约10.81MB,其中10个Python脚本为核心源码&…

2026/9/24 18:10:58 阅读更多 →
Python+Django实战:高校学生违纪管理系统开发与数据建模

Python+Django实战:高校学生违纪管理系统开发与数据建模

简介:这套基于Python的高校学生违纪信息管理系统,面向教育信息化开发者、高校管理人员及需要搭建同类Web管理系统的技术人群,系统围绕学生违纪数据的录入、分类统计、处罚记录、报表导出、权限管理和预警通知等核心功能展开,能够显…

2026/9/24 18:10:58 阅读更多 →
JavaEE二手图书交易平台源码实战:分层架构与部署避坑指南

JavaEE二手图书交易平台源码实战:分层架构与部署避坑指南

简介:这是一套面向高校计算机相关专业学生的JavaEE课程设计完整资源,以二手图书交易平台为选题,适合作为期末大作业、课程设计或毕业设计参考,新手也能快速上手。资源包共173个文件,约25.68MB,涵盖21个Java…

2026/9/24 18:10:58 阅读更多 →
JavaEE二手图书交易平台实战:Spring+MyBatis从零搭建与避坑指南

JavaEE二手图书交易平台实战:Spring+MyBatis从零搭建与避坑指南

简介:这是一套面向高校计算机相关专业学生的JavaEE课程设计完整项目,以二手图书交易平台为主题,适合作为期末大作业、课程设计或毕业设计参考。项目采用Java语言开发,功能覆盖用户注册登录、图书发布、分类浏览、订单管理等核心业…

2026/9/24 18:09:58 阅读更多 →

日新闻

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程

简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为…

2026/9/24 0:00:19 阅读更多 →
单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

单细胞注释实战:基于Scanpy的标记基因与参考映射流程解析

简介:一份基于单细胞RNA测序数据的细胞类型注释算法研究Python毕业设计源码,针对计算机相关专业正在做毕设或需要项目实战的学习者,可用于课程设计与期末大作业。项目代码完整、经导师指导评审通过,可直接运行,覆盖数据…

2026/9/24 0:00:19 阅读更多 →
C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

C#源生成器实战:用增量生成器替代反射,告别AOT崩溃

第一次在项目里被反射卡住,是在一个老旧的WinForms模块里:几十个类依赖PropertyChanged通知,运行时反射读属性、发通知,每次启动慢半拍不说,一上.NET Native/AOT裁剪模式几乎全面崩盘。后来我把这段逻辑全部改成C#源生…

2026/9/24 0:00:19 阅读更多 →

周新闻

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

Flutter for OpenHarmony游戏卡片渐变背景实战:从原理到性能优化

直接铺开项目本身吧。这几个月我一直在折腾一件事:用Flutter给OpenHarmony做一款游戏集合类的App,说白了就是把若干小游戏塞进一个壳里,用统一入口分发。这个方向本身不算新鲜,真正让我花了不少心思的,是首页那堆游戏卡…

2026/9/24 14:34:13 阅读更多 →
Word表格编号全攻略:从列表编号到题注交叉引用

Word表格编号全攻略:从列表编号到题注交叉引用

写Word文档,最让人头疼的往往是那些“看起来不起眼”的小问题。比如表格编号这事:今天在表后面多加了两个空白行,明天给客户交稿前发现整个章节的编号全部错位,光是挨个改序号就能耗掉大半个下午。我前阵子帮人整理一份上百页的技…

2026/9/24 9:10:42 阅读更多 →
从第一个站到第二个站:独立开发者的静态网站选型与落地实践

从第一个站到第二个站:独立开发者的静态网站选型与落地实践

1. 项目概述1.1 核心需求解析做独立开发者这几年,说实话,第一个网站上线的那天晚上我兴奋得没睡着。但等它跑了半年,流量惨淡、功能臃肿、代码自己都懒得看第二遍之后,我才慢慢琢磨明白一个道理:第一个网站是练手&…

2026/9/24 14:33:56 阅读更多 →

月新闻

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能

持续集成 流水线自动化与 声明式交付 实践:原型怎样变成可用功能分类:[AI/大模型]细分主题:AI 增强型 CI/CD 流水线自动化与 GitOps 实践:Agent 工作流、工具调用与任务拆解:从原型到生产的验收清单很多团队在尝试用大…

2026/9/24 12:50:34 阅读更多 →
容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场

容器编排 生产环境运维与排障实战:复盘记录怎样真正派上用场分类:[工程技术]细分主题:Kubernetes 生产环境运维与排障实战:可复制的项目复盘模板与决策记录大部分团队的事故复盘报告,最后都变成了躺在 Confluence 或钉…

2026/9/24 14:33:48 阅读更多 →
容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步

容器 容器化技术与镜像安全管理:核心链路应该先拆哪一步分类:[工程技术]细分主题:Docker 容器化技术与镜像安全管理:核心链路的逐步实现与关键代码取舍面对一个积累了五六年历史包袱的单体架构应用(包含 Web 接口、后台…

2026/9/24 12:49:17 阅读更多 →