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

php自己做网站访问量计算淮北论坛最新招聘

php自己做网站访问量计算,淮北论坛最新招聘,discuz网站搬家教程,php 网站 服务器vector#xff08;上#xff09;#xff1a;C初阶学习第八弹——探索STL奥秘#xff08;三#xff09;——深入刨析vector的使用-CSDN博客 vector#xff08;中#xff09;#xff1a;C初阶学习第九弹——探索STL奥秘#xff08;四#xff09;——vector的深层挖掘和…vector上C初阶学习第八弹——探索STL奥秘三——深入刨析vector的使用-CSDN博客 vector中C初阶学习第九弹——探索STL奥秘四——vector的深层挖掘和模拟实现-CSDN博客 目录 一、vector的迭代器失效问题的本质 二、vector迭代器失效的原因 1、引起底层空间改变的操作 2、进行指定元素删除的时候—erase 3、在其他编译环境下的失效情况 4、string的迭代器失效 三、vector迭代器失效的解决方法 四、总结 前言 在前面我们已经学习了vector的使用和其模拟实现相信也帮助我们了解了vector这个容器的基本规则但其实在我们讲解的过程中有一些知识点我们还没提到今天我们就专门来讲一下vector在使用和模拟实现的过程中一个容易出错的知识点——迭代器失效问题 一、vector的迭代器失效问题的本质 迭代器的作用就是能让我们忽略变量的类型方便我们访问其本质其实还是指针类如对于vector的类型的后往后访问其实也是将指针改为指向下一个数据的指针迭代器失效就是迭代器底层使用的指针指向的空间被释放了这样再使用这个迭代器就会造成程序崩溃这就是迭代器失效迭代器失效也与编译环境有一定关系 二、vector迭代器失效的原因 vector容器可能会发生迭代器失效的操作有以下几种 1、引起底层空间改变的操作 比如resize、reserve、insert、assign、push_back等 例如 #includeiostream #includevector using namespace std;int main() {vectorint v{ 1,2,3,4,5,6 };auto it v.begin();while (it ! v.end()){cout *it ;it;}cout endl;return 0; } 对于这样一个程序我们定义了一个v并用迭代器来实现全部访问运行结果如下 在这个程序中我们记录下了v的begin迭代器并一步步向后走从而实现遍历但我们知道vector的本质上与顺序表是类似的 它是在内存上找一段能放下当前数据的空间但是当我们进行扩容等操作的时候的时候可能原空间下就不够用了就需要找一个新的位置开辟空间并且销毁旧空间这个时候迭代器指向的位置就会发生变化而it还记录的原来begin指向原来的那段空间所以就会导致程序崩溃出现迭代器失效的现象 例如错误示范 #includeiostream #includevector using namespace std;int main() {vectorint v{ 1,2,3,4,5,6 };auto it v.begin();v.resize(100, 8); //这里会扩容while (it ! v.end()){cout *it ;it;}cout endl;return 0; } 运行结果 2、进行指定元素删除的时候—erase 当进行指定位置删除时最终返回的是删除元素的位置当我们访问这个位置的时候如果删除元素后面还有值那么就会往前挪我们就能访问到元素但是当删除位置pos位于最后一个元素时删除后我们访问就会访问到begin()就会越界 代码实例 #include iostream using namespace std; #include vector int main() {int a[] { 1, 2, 3, 4 };vectorint v(a, a sizeof(a) / sizeof(int));// 使用find查找3所在位置的iteratorvectorint::iterator pos find(v.begin(), v.end(), 3);// 删除pos位置的数据导致pos迭代器失效。v.erase(pos);cout *pos endl; // 此处会导致非法访问return 0; } 运行结果 3、在其他编译环境下的失效情况 这一点并不是很重要在上面我们也提到了vector的迭代器失效也与编译器环境有关这里有关指的是报错情况及运行上例如在Linux下g对于迭代器失效的检查就没有那么严格一般迭代器失效也能运行只不过运行结果会出错并不会直接中断总之迭代器失效一定会导致错误我们在平时使用迭代器的时候一定要注意这个问题 4、string的迭代器失效 string在内存中的存储情况有一点类似vector也是在内存上先开辟空间所以也会出现上面的哪些情况出现迭代器失效的问题具体原因与上面一样下面我们给出一个例子观察一下 代码实例 #include iostream #include string using namespace std;int main() {string s(hello);auto it s.begin();// 放开之后代码会崩溃因为resize到20会string会进行扩容// 扩容之后it指向之前旧空间已经被释放了该迭代器就失效了// 后序打印时再访问it指向的空间程序就会崩溃//s.resize(20, !);while (it ! s.end()){cout *it;it;}cout endl;it s.begin();while (it ! s.end()){it s.erase(it);// 按照下面方式写运行时程序会崩溃因为erase(it)之后// it位置的迭代器就失效了// s.erase(it);it;} } 运行结果 三、vector迭代器失效的解决方法 解决方法非常简单在使用前重新赋值即可 例如1中的 #includeiostream #includevector using namespace std;int main() {vectorint v{ 1,2,3,4,5,6 };auto it v.begin();v.resize(100, 8); //这里会扩容it v.begin(); //使用前重新赋值while (it ! v.end()){cout *it ;it;}cout endl;return 0; } 运行结果 四、总结 以上就是vector迭代器失效的问题这个问题还是挺容易出现的稍不留意就可能会出错我们平时使用迭代器的时候要注意这点 感谢各位大佬观看创作不易还请各位大佬点赞支持
http://www.tj-hxxt.cn/news/130454.html

相关文章:

  • 城乡住房建设厅网站首页移动终端开发
  • 无锡品牌网站建设培训网站系统建设
  • 滑县网站建设wordpress部署php
  • 商业网站的创建程序网站更改了资料 百度什么时侯来抓取
  • 昆明网站建设在河科技如何使用二级域名做网站
  • asp网站攻击网站开发实验总结
  • 做网站支付系统难度wordpress homepage plugin
  • 网站首页html代码的标签怎样打开用sql做的网站
  • 网站seo优化如何做佛山企业网站制作公司
  • 龙岩做网站开发哪家做的好网页动效 wordpress
  • 营销型企业网站分析与诊断虚拟网站php专业型
  • 垂直网站 开源码邵阳小学网站建设
  • 东莞做网站最好有哪些公司flask公司网站开发
  • 网站用户引导在阿里云做视频网站需要什么
  • 定制企业网站建设制作哪些婚庆公司比较好
  • 高度重视部门网站建设wordpress聊天系统
  • 美工设计素材网站公司网站首页的图片怎么做
  • 提供定制型网站建设wordpress 删除插件
  • 网上注册网站要钱吗用vs做网站如何连接数据库
  • 可信的品牌网站建设设计网站printerest
  • 个人建站网站网页制作软件电脑
  • 勉费申请做网站htm网页设计
  • 网站模板用什么做网页美工基础
  • 大理州住房和城乡建设局网站企业网站制作公司电话
  • 网站开发虚拟主机管理系统建设银行官方网站登
  • 做app网站需要什么条件dw网站制作效果怎么做
  • 广州网站建设专业乐云seo玉树wap网站建设
  • 中国建设银行培训网站国外网站建设的研究现状
  • 动力做网站不用域名访问网站
  • 景县住房和城乡规划建设局网站安徽建设工程信息网站