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

小学学校网站建设培训资料湛江城市建设培训中心网站

小学学校网站建设培训资料,湛江城市建设培训中心网站,做男装海报的素材网站,重庆网站建设优化目录 1.vector迭代器失效问题 1.底层空间改变 ​编辑 2.指定位置元素的删除操作 2.Linux下的迭代器失效检测 1.扩容 2.删除 3.解决方法 1.vector迭代器失效问题 迭代器的主要作用就是让算法能够不用关心底层数据结构#xff0c;其底层实际就是一个指针#xff0c;或者是…目录 1.vector迭代器失效问题 1.底层空间改变 ​编辑 2.指定位置元素的删除操作 2.Linux下的迭代器失效检测 1.扩容 2.删除 3.解决方法 1.vector迭代器失效问题 迭代器的主要作用就是让算法能够不用关心底层数据结构其底层实际就是一个指针或者是对指针进行了封装 比如 vector 的迭代器就是原生态指针 T* 。因此 迭代器失效实际就是迭代器底层对应指针所指向的 空间被销毁了而使用一块已经被释放的空间 造成的后果是程序崩溃 ( 即 如果继续使用已经失效的迭代器 程序可能会崩溃 ) 。 在C中当一个vector进行了插入或删除操作时其迭代器可能会失效。这是因为在插入或删除操作之后vector可能会重新分配内存空间导致原来的迭代器指向的位置不再有效。 可能会导致其迭代器失效的操作有 1.底层空间改变 1. 会引起其底层空间改变的操作都有可能是迭代器失效 比如 resize 、 reserve 、 insert 、 assign 、push_back等。 #define _CRT_SECURE_NO_WARNINGS #includeiostream using namespace std; #includevectorint main() {vectorint v;v { 1,2,3,4,5,6 };auto it v.begin();//使用reserve扩容可能会引起底层容量的改变旧空间释放但是it依旧使用的时释放前的旧空间v.reserve(100);while (it ! v.end()){cout *it ;it;}return 0; } 我们使用resize 、 reserve 、 insert 、 assign、 push_back等操作都可能会导致扩容 也就是说vector底层原理旧空间被释放掉 而在打印时it还使用的是释放之间的旧空间在对it迭代器操作时实际操作的是一块已经被释放的 空间而引起代码运行时崩溃。 如果我们在扩容后重新赋值即可解决这个问题可以继续操作it迭代器。 2.指定位置元素的删除操作 #define _CRT_SECURE_NO_WARNINGS #includeiostream using namespace std; #includevectorint main() {vectorint v;v { 1,2,3,4,5,6 };//auto it v.begin();//使用reserve扩容可能会引起底层容量的改变旧空间释放但是it依旧使用的时释放前的旧空间//v.reserve(100);auto it v.begin();while (it ! v.end()){v.erase(it); //删除it位置的数据导致迭代器失效//这时再对it进行操作就是非法访问cout *it endl;it;}return 0; } 如图中代码运行会崩溃 erase 删除 pos 位置元素后 pos 位置之后的元素会往前搬移没有导致底层空间的改变理论上讲迭代器不应该会失效但是如果pos 刚好是最后一个元素删完之后 pos 刚好是 end 的位置而 end 位置是没有元素的那么pos 就失效了。因此删除 vector 中任意位置上元素时 vs 就认为该位置迭代器失效了。 如果在删除后对迭代器it重新赋值这个时候就不会失效因为erase返回删除元素下一个位置元素的迭代器。 2.Linux下的迭代器失效检测 Linux 下 g 编译器对迭代器失效的检测并不是非常严格处理也没有 vs 下极端。 1.扩容 运行如下代码 可以运行但是结果已经出错。 2.删除 运行如下代码 可以正常运行erase删除任意位置代码后linux下迭代器并没有失效 因为空间还是原来的空间后序元素往前搬移了it的位置还是有效的 但是如果删除的是最后一个元素呢 程序崩溃因为删除最后一个元素删除后it已经超过endit导致程序崩溃 3.解决方法 与 vector 类似 string 在插入 扩容操作 erase 之后迭代器也会失效 迭代器失效解决办法在使用前对迭代器重新赋值即可 1.在进行插入或删除操作之后更新迭代器的位置使其指向有效的元素。 2.在进行插入或删除操作之前先将迭代器保存下来然后再进行操作之后重新定位迭代器。 3.另外C11引入了emplace_back()和emplace()函数它们可以在vector中直接构造对象而不是先创建临时对象再插入这样可以减少迭代器失效的可能性
http://www.pierceye.com/news/691813/

相关文章:

  • 做外贸 建网站要注意什么ssr网站怎么做
  • 杭州做兼职网站建设老五wordpress
  • 网站建设工资怎么样网站曝光率
  • 亚泰国际建设股份有限公司网站app推广方案模板
  • pathon能做网站开发吗直播网站模板
  • 东莞网站设计网址html怎么添加图片为背景
  • 怎样自己做企业网站网上投诉平台
  • 平价网站建设宝安营销型网站制作
  • 中英网站怎么做seo团队管理系统
  • 做签到的网站上海网站se0优化公司
  • 网站开发技术说明文档网站审核员做点啥
  • 网站设计与网页设计的区别建设部资质查询网站
  • 教育网站制作哪家服务好网站建设运转
  • 山西省轻工建设有限责网站网件路由器无线桥接
  • 做网站 怎么选择公司wordpress lnmp1.4
  • 网站建设价格标准科技感设计感的展厅
  • 广州番禺建设银行网站登录做摄影网站的目的
  • 前端外包网站php网站开发哪个好
  • 网站开发与维护好找工作吗网站建设招标书模板
  • 浙江金顶建设公司网站房产获客软件
  • 什么网站比较容易做python做网站服务器
  • 东城网站建设微信小程序商店怎么开
  • 企业网站源码千博网站推广怎么做流量大
  • 福州最好的网站建设服务商浙江华临建设集团有限公司网站
  • cdr 做网站支付宝小程序开发者工具
  • 建一个全部由自己控制的网站需要多少钱手机网站大全
  • 酒店电子商务网站策划书网站排名下降的原因
  • 成都网站制作公司报价成都装修公司哪家好
  • 用自己的电脑做网站需要备案吗wordpress rss教程
  • 洛阳网站搭建江西网站建设价格低