目录一简言二构造函数与析构函数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数组当中出现次数超过一半的数字
企业数字化 ERP 产品动态
相关推荐
同城生活小程序开发:未开通业务入口怎么按配置隐藏 同城生活小程序首期只开外卖时,若首页仍展示跑腿、团购等未开通入口,用户点进去空白或报错,转化与信任双损。宜在配置层做业务开关,端上按开关渲染菜单,而不是改代码发版才能藏入口。本文用代码深讲说明配置模型、端侧… · 2026/9/24 17:28:36
数字化工业软件全面AI解决方案 重塑从设计、仿真到PLM的空华品国邮智能研发新范式产品越来越复杂,合规、协同压力拉满,传统研发陷入效率低、周期长、成本高的困境怎么办?西门子数字化工业软件全面的 AI 解决方案,重塑从设计、仿真到 PLM 的全生命周期智能研发新… · 2026/9/24 17:28:29
2026免示教协作焊接机器人如何选?卡诺普机器人方案实力解析 目录
1.免示教焊接技术的行业背景
2.免示教焊接的技术内涵与应用价值
3.卡诺普机器人焊接自动化技术体系
4.视觉定位与焊缝检测技术
5.电弧跟踪与自适应补偿机制
6.寻位与偏移功能的工程应用
7.多层多道焊接的编程效率优势
8.典型应用场景与技术选型
9.总结与展望
一、免示教焊… · 2026/9/24 18:00:57
后端技术栈怎么选?这5个维度帮你理清思路 后端技术栈选型是每个团队都会面临的难题。Java、Go、Python、Node.js、Rust……每种语言背后又有一堆框架和中间件。选对了,团队事半功倍;选错了,可能陷入“重构无尽头”的泥潭。其实,技术选型没有标准答案,但有一套可… · 2026/9/24 18:00:50
python入门学习(二) # python中的循环语句
from operator import truedivfrom ctypes.macholib.dyld import DEFAULT_LIBRARY_FALLBACK
from logging import error# if条件判断语句 --- 单分支
# if的核心在于布尔值 (True/False) 计算机非常死板,它必须得到一个… · 2026/9/24 18:00:50
复杂工艺铝单板厂家推荐——从项目选型看行业头部企业 复杂工艺铝单板选型,本质上是在选一家能同时搞定双曲、冲孔、仿石材等多种工艺的系统供应商。巨星铭创年产500万方、年产值13亿元(2025年),在异形、圆弧、蜂窝等复杂版型铝单板领域积累了多个标志性项目——杭州大会展中心项目体量… · 2026/9/24 18:00:50
分布式事务太难?这4种方案帮你彻底搞懂 单体时代,一个Transactional就能搞定数据一致性。到了微服务,订单服务扣库存、账户服务扣余额、积分服务加积分,三个数据库、三个服务,任何一个环节失败,数据就可能错乱。分布式事务之所以难,是因为它要在不… · 2026/9/24 18:00:50
基于YOLOv8的渔船作业监控系统:从环境搭建到边缘部署全流程 简介:这是一套面向计算机、人工智能、自动化等专业学生与教师的毕业设计级项目资源,围绕YOLOv8实现渔船作业监控系统,可用于毕设、课程设计、大作业或项目立项演示。压缩包共97个文件,约24.21MB,以70个Python源码文件为… · 2026/9/24 0:00:13
1D-CNN时间序列建模实战:从Conv1d原理到工业落地 简介:面向时间序列数据建模的一维卷积神经网络完整实现,适合深度学习入门者及需要快速验证时序模型的研究者,能够从音频、文本、传感器或股价等序列中挖掘局部特征与时间依赖。压缩包体积很小,只有3KB,内含3个Python脚… · 2026/9/24 0:00:26
柔软的L:汉语语流中被忽视的舌肌张力控制 1. 这个“L”不是字母表里的L,而是舌尖上的L最近在几个方言群和语音教学社群里,反复看到有人发一句:“也说字母L:柔软的长舌”。初看以为是英语发音课笔记,点开才发现全是方言爱好者、播音系学生、语言康复师甚至戏曲演… · 2026/9/24 0:00:44