C++vector创新互联

十年网站开发经验+多家企业客户+靠谱的建站团队

量身定制+运营维护+专业推广+无忧售后,网站问题一站解决

目录

1.vector的介绍及使用

1.1vector的介绍

1.2vector的使用

1.2.1vector的定义

1.2.2vectoriterator的使用

1.2.3vector空间增长问题

1.2.3vector增删查改

1.2.4vector迭代器失效问题。(重点)

1.2.5vector在OJ中的使用

2.vector深度剖析及模拟实现

使用memcpy拷贝问题

动态二维数组理解

模拟实现vector:

我们可以看到这里的iterator行为上就像指针一样,但又不一定是指针,而对于vector这里来说,这里的iterator就是一个原生指针,后面会讲到迭代器失效的问题。

这里的resize和reserve和之前的string的含义一样,这里就看看函数的使用方式即可:

这是vs下的扩容:

reserve的优势就在于如果我们知道要开多少空间,我们就可以一次性开好,就可以避免频繁的扩容,因为我们知道频繁扩容是要付出代价的,所以C++在这方面做的很好。

上述内容很简单,查网站就会使用,不过多讲解,下面主要讲解迭代器失效的问题;

#includeusingnamespacestd;#includeintmain(){ vectorv{1,2,3,4,5,6}; autoit=v.begin(); v.assign(100,3); //因为这里扩容过,所以迭代器肯定失效 while(it!=v.end()) { cout<<*it<<""; ++it; } cout<结果正如我们所料:

解决这个办法就是更新一下迭代器即可正常使用。

看看其他例子:

intmain(){ inta[]={1,2,3,4}; vectorv(a,a+sizeof(a)/sizeof(int)); //使用find查找3所在位置的iterator vector::iteratorpos=find(v.begin(),v.end(),3); //删除pos位置的数据,导致pos迭代器失效。 v.erase(pos); cout<<*pos

我们可以在不是偶数的时候再++,同时更新一下it,是偶数的就不用++

intmain(){ vectorv{1,2,3,4}; autoit=v.begin(); while(it!=v.end()) { if(*it%2==0) it=v.erase(it); else { ++it; } } for(auto&e:v) { cout<

但是在Linux底下g++编译器就没有检查的那么严格:

看看扩容这段代码:

//1.扩容之后,迭代器已经失效了,程序虽然可以运行,但是运行结果已经不对了intmain(){ vectorv{1,2,3,4,5}; for(size_ti=0;i

可以看到Linux底下是没有报错的,因为空间还是原来的空间,后序元素往前搬移了,it的位置还是有效的,但是对于刚刚那个偶数那题Linux下也会报错:

4.与vector类似,string在插入+扩容操作+erase之后,迭代器也会失效

最后说说如何解决这类问题:

因为数组在实际的应用非常广泛,所以C++的vector的运用也是非常多,而且嵌套vector远远比C语言中的二维数组好用,下面我们就来看看vector在oj中的应用:

classSolution{public:vector>generate(intnumRows){//先开辟空间vector>vv;vv.resize(numRows);for(size_ti=0;i2.力扣

这道题如果使用哈希表的话就超出了这个空间复杂度了,用暴力查找的方式又不符合题意,这里有一个思路非常巧妙:

我们可以利用位运算来解决,因为这个除了这个数字其他的数字都出现过3次,我们可以把数组中的每一个数字的二进制位加起来,然后让结果%3就可以得到我们所想要的二进制位了,(不论是0还是1,%3的结果都是我们想要的那个数的二进制位),最后我们用ret每次接受一下要的到二进制位,就可以得到答案。

代码实现:

classSolution{public:intsingleNumber(vector&nums){//我们可以把所有的二进制位全部加起来,然后%3就可以得到所求的数字的二进制位了intret=0;//我们要求的数字for(inti=0;i<32;++i){intsum=0;for(autoe:nums){sum+=((e>>i)&1);}//把要求的数字的二进制位找出来if(sum%3){ret|=(1<3.数组中出现次数超过一半的数字_牛客题霸_牛客网

思路:因为所出现的元素的个数超过了一般半,我们就可以通过计数的方式记录它,如果是这个元素就++,不是就--,最后得到的那个数一定是我们想要的数,另外,我们还可以拓展一下:如果这个数不一定存在那要怎么处理?

我们可以对这个记录一下这个数,然后再遍历一次数组,通过计数的方式去确认是否存在。

classSolution{public:intMoreThanHalfNum_Solution(vectornumbers){//因为所出现的元素的个数超过了一般半,我们就可以通过计数的方式记录它,如果是这个元素就++,不是就--//这样的话就可以在最后的时候找到这个元素inttmp=numbers[0];//记录我们要求的数据inttimes=1;for(inti=1;i4.力扣

这一题的难度比较大,运用到了回溯算法

思路:

我们可以通过一个数组来记录数字与字母之间的映射关系,然后利用回溯算法(递归)就解决像这种组合问题,下面通过这题来大概讲解一下回溯:

这个很像二叉树的遍历,但又复杂一点,这个可以看成多叉树的遍历方式。我们可以通过每一层的递归来达到一个组合的效果。

classSolution{//映射数组stringnumstr[10]={"","","abc","def","ghi","jkl","mno","pqrs","tuv","wxyz"};public://递归子函数voidcombine(string&digits,inti,vector&vcombine,stringretstr){if(i==digits.size()){vcombine.push_back(retstr);return;}//找到对应的字母intnum=digits[i]-'0';stringstr=numstr[num];//遍历串中的所有字符,然后进入下一层for(autoch:str){combine(digits,i+1,vcombine,retstr+ch);}}vectorletterCombinations(stringdigits){vectorvcombine;if(digits.empty()){returnvcombine;}inti=0;stringretstr;//用来每次加,然后最后加到vcombine中//递归combine(digits,i,vcombine,retstr);returnvcombine;}};下面通过画递归展开图再来看看其中的细节:

这个和之前讲拷贝构造的时候很像,都是浅拷贝导致的问题。可能会引起内存泄漏甚至程序崩溃。

在前面就已经看过了二维数组的题了,这里不过多介绍,还是介绍一下memcpy也会使内存崩溃的结果:

要解决这个问题,我们还是要进行深拷贝,这是下面的reserve的模拟实现代码来解决这个问题:

我们可以通过这个一个对象赋值的方式来进行深拷贝

扩容是防止浅拷贝,所有把利用赋值来实现深拷贝。insert以及erase要注意更新迭代器,防止迭代器失效。

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

THE END
1.牛客网求职之前,先上牛客,就业找工作一站解决。互联网IT技术/产品/运营/硬件/汽车机械制造/金融/财务管理/审计/银行/市场营销/地产/快消/管培生等等专业技能学习/备考/求职神器,在线进行企业校招实习笔试面试真题模拟考试练习,全面提升求职竞争力,找到好工作,拿到好offer。_https://www.nowcoder.com/
2.牛客网剑指offer(二)替换空格牛客网官网牛客网剑指offer第二题,替换空格,原地址在这https://www.nowcoder.com/ta/coding-interviews 想要练习的小伙伴可以去练习,期待大家都能拿到好的offer。 题目:请实现一个函数,将一个字符串中的空格替换成“%20”。 例如,当字符串为We Are Happy. 则经过替换之后的字符串为We%20Are%20Happy。 https://blog.csdn.net/hjxu2016/article/details/79701256
3.牛客网求职之前,先上牛客,就业找工作一站解决。互联网IT技术/产品/运营/硬件/汽车机械制造/金融/财务管理/审计/银行/市场营销/地产/快消/管培生等等专业技能学习/备考/求职神器,在线进行企业校招实习笔试面试真题模拟考试练习,全面提升求职竞争力,找到好工作,拿到好offer。_https://m.zhiyeapp.com/
4.牛客网牛客网是一个综合性的在线学习和求职平台,为广大学生和求职者提供丰富的资源和服务。该网站涵盖了题库、专项练习、公司真题(笔试和面试)、在线编程、面试经验、AI模拟面试、求职、学习等多个板块,以及课程、专栏文章、项目实战、图书馆、技术栈、竞赛等内容。 https://www.baobaocun.com/space-uid-3781.html
5.牛客网访问官网 赞助 牛客网是一个互联网求职和笔试刷题神器,提供C++、Java、前端、产品、运营技能学习、备考、求职题库,用户可在线进行百度阿里腾讯网易等互联网名企笔试面试模拟考试练习,和牛人一起讨论经典试题,全面提升个人的技术能力。 牛客网的优势特点 在线编程练习:牛客网提供了大量的编程题目,覆盖了数据结构、算法、https://www.xue8nav.com/sites/58.html
6.leetcode和牛客网哪个好LeetCode和牛客网都是非常优秀的刷题网站,但是它们的定位不同。LeetCode是一个专注于算法和数据结构的刷题平台,而牛客网则是一个综合性的IT技术社区,除了刷题之外,还有许多其他的功能,比如面试经验分享、职业规划等 。 如果你想要提高自己的算法和数据结构能力,那么LeetCode是一个非常好的选择。如果你想要了解最新的https://www.togogo.net/article/1754.html
7.牛客网题库官网入口(www.nowcoder.com)官方网站首页牛客网题库官网 牛客网题库官网是一个集笔面试系统、题库、课程教育、社群交流、招聘内推于一体帮助大家求职面试的招聘类网站。牛客网题库中包含几万道题目,主要通过第三方购买和 UGC 的方式获得。涉及的行业包含:互联网、金融、企业服务、硬件、通信电子、游戏。www.nowcoder.com - 2024-12-02 - 收藏 牛客网题https://top.080210.com/search/tags/%E7%89%9B%E5%AE%A2%E7%BD%91%E9%A2%98%E5%BA%93-1.html
8.牛客网如何发起投票,牛客网投票教程详解其中,牛客网也成为了比较受欢迎的一个平台,今天我们就来大揭秘一下牛客网的投票功能吧! 首先,我们需要登录牛客网账号。如果你还没有注册的话,可以前往牛客网的官网进行注册。注册完成之后,我们就可以开始发起投票了。在牛客网的首页中,我们可以看到投票的标签,在投票标签页面中,可以看到其他用户发起的投票以及自己在http://renzushan.com.cn/article/2024121363568.html
9.自学编程有这10个网站就够了,帮你省下不少学费w3cschool笔记1. 牛客网 - 求职之前,先上牛客,就业找工作一站解决。 网址:https://www.nowcoder.com/ 2. Lintcode - 用刷题的方式拿到大厂 Offer ! 网址:https://www.lintcode.com/ 二、视频课程类 0. 编程狮 - 随时随地学编程 网址:https://www.w3cschool.cn/ https://www.w3cschool.cn/article/54166938.html
10.牛客网数据分析师牛客网数据分析师招聘猎聘牛客网数据分析师招聘频道为您提供大量的牛客网数据分析师招聘信息,有超过10000多牛客网数据分析师招聘信息任你选寻,招聘牛客网数据分析师人才就来猎聘牛客网数据分析师招聘!求职找工作就用猎聘聊。https://www.liepin.com/s/nkwsjfxsg1o6/
11.一般都浏览这些网站,不仅仅提升编程水平哦!!6. 牛客网 — 面经和刷面试题:https://www.nowcoder.com 各个公司的面试题和面经分享,找工作前认真刷一刷,一定会有很大收获!拿到心仪的 offer! 7. Web 开发练习题:https://www.freecodecamp.org/ 这是国外发起的一个 Web 开发学习的网站,从简单到深入,一步一步带你学习 Web 开发。就像一本练习册,并且https://www.74cms.com/news/show-1814.html
12.小刘同学的秋招记录7.4投递,牛客网内推 岗位:游戏服务器开发 当前进展:直接在网站上填写信息,不知道怎么查询进度 7月14号通常没有合适的岗位,应该就是简历没过。然后说会给我提供八月中旬秋招的笔试面试机会。 8月2号再次投递Java后端开发 给我转到了Go? 通知8月15号笔试 https://www.jianshu.com/p/7e82364e3068
13.fpga开发32个关于FPGA的学习网站2、牛客网 网站地址:https://www.nowcoder.com/exam/oj?page=1&tab=Verilog%E7%AF%87&topicId=311 类似LeetCode的刷题网站,近来添加了Verilog部分,可以在线仿真出结果,有点类似 HDLbits ,比较适合学生和初学者。 3、FPGA Tutorial 网站地址:https://fpgatutorial.com/ http://51969.com/post/15778930.html
14.教你如何从官网下载ipp,并在vs里面跑起来ipp是Intel的一个函数加速库,库中的函数有不错的加速效果。最近因为项目需求,需要用到ipp函数库,但是从官网下载的时候遇到了一些问题,按照其他博客介绍的方法并没有找到正确的下载入口,这里介绍正确的下载方法给需要的朋友们。 点击ipp的官网,进去后的界面如下: https://blog.nowcoder.net/n/0214270a1c0a498fa602ef1e5a1e1d6a
15.考试资料网考试试题考试题库考试资料网目前已为广大考友提供10万套在线试卷进行全真测试、模拟练习,同时提供公务员,外语类,财会类,建筑类,职业资格,学历考试,医药类,外贸类,计算机类等考试的报名时间、考试时间、考试大纲、成绩查询等相关资讯以及历年真题、模拟试题、名师视频辅导课程等备考http://www.ppkao.com/
16.原子哥,专注电子技术教学金牌讲师ESP32物联网项目实战 本周热门新课推荐更多 【正点原子】手把手教你快速入门STM32 免费667人已学 【第三期】手把手教你学ZYNQ&MPSoC系列之嵌入式Linux开发篇 免费316人已学 【正点原子】手把手教你学I.MX93开发板之系统开发篇 免费260人已学 【正点原子】手把手教你学DNK210快速入门视频教程 免费258人https://www.yuanzige.com/
17.完美世界24届春季校园招聘及25届完美实习生招聘火热进行中!程序类(分互联网/游戏程序)、艺术设计类、游戏策划类、综合类 *所有职位均可投递,按投递顺序筛选,招满即关; 在网申期间,实际开放岗位请以官网的实时更新为准 【工作地点】 工作地点主要位于北京、成都、苏州,详见投递页面 【投递传送门】 √ 电脑端:网页搜索“完美世界招聘官网”,进入完美世界校招 https://jy.cafa.edu.cn/campus/view/id/734691
18.亿牛网官方网理想股票技术论坛亿牛网官方网app 亿牛网官方网站下载地址 亿牛网官方网站入口登录最新消息 亿牛网市盈率查询 牛客网官网 亿牛网 亿牛网市盈率查询官网 亿牛网股票估值查询 亿牛网 市盈率【极速超短出击】尾买精品,尾盘排序打分辅助,今买明卖超级短线利器,快进快出 [金钻指标-技术共享交流论坛] 本帖最后由 糖宝灵虫 于 2024-8-2 17:https://www.55188.com/tag-1952037.html
19.「牛客招聘」牛客怎么样?社区论坛研发,任职牛客网后端开发工程师职位,常驻北京;近期有336位访问者,在脉脉形成影响力97;在2021-5至今,任牛客网公司后端开发工程师职位;在2020-7至2021-5,任北京乐天派网络科技有限公司公司服务端开发工程师职位。 工作经历 后端开发工程师 牛客网 https://maimai.cn/brand/home/2vetfIQL