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

网站建设方案书 个人网站郑州网站建设行情

网站建设方案书 个人网站,郑州网站建设行情,纯html5网站源码,做网站干什么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.w-s-a.com/news/199998/

相关文章:

  • 城乡和建设部建造师网站众筹平台网站建设
  • 外贸网站模板免费下载微网站制作软件
  • 一个新的网站怎么做宣传技术先进的网站建
  • 福建网站建设有限公司需求网站
  • 生物科技企业网站做的比较好的企业培训网站模板
  • 南京 高端网站建设网站备案密码怎么找回
  • 蛋糕店网站模板建设电子商务系统网站
  • 海口网站建设优化公司网站开发要加班吗
  • 建设一个网站需要注意哪些要求群晖的网站开发
  • 精通网站开发阅读网页视频下载慢怎么办
  • 网站标题的选择巴音郭楞库尔勒网站建设
  • 成都市网站建设服务商怎么进网站后台管理系统
  • 企业网站站内优化30岁做网站编辑
  • 与安网站建设网站建设征求意见稿
  • 学校网站推广做网站手把手
  • 网站开发遇到的难题wordpress文章调用
  • 网站建设做的好在线logo免费设计生成器标智客
  • 郑州做网站齿轮网站排名怎么做 site
  • 船员专用网站开发建议wordpress 图片占用id
  • 桌面软件开发跟网站开发那个上海网站备案在哪里查询
  • 罗湖网站建设陕西省建设网官网住房和城乡厅官网
  • 做一个网站的详细教学wordpress 忘记用户名密码
  • 建设银行的网站是多少wordpress添加新页面跳转
  • 网站设计费用抓取网站访客qq号码
  • 驾校视频网站模板郑州网站建设价格
  • 上海 有哪些做网站的公司成都企业网站备案流程
  • 移动端快速建站的方法青海公司网站建设
  • 网站重新搭建程序要多少钱移动互联网应用的使用情况
  • 学建站论坛给别人做网站怎么赚钱吗
  • 响应式网站代码校友会网站建设的目的