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

江苏齐力建设集团网站推广引流平台app大全

江苏齐力建设集团网站,推广引流平台app大全,工程交易网,食品餐饮网站建设一、迭代器#xff1a; 迭代器的主要作用就是让算法能够不用关心底层数据结构#xff0c;其底层实际就是一个指针#xff0c;或者是对指针进行了封装#xff0c;比如#xff1a;vector的迭代器就是原生态指针T* 。因此迭代器失效#xff0c;实际就是迭代器底层对应指针所…一、迭代器 迭代器的主要作用就是让算法能够不用关心底层数据结构其底层实际就是一个指针或者是对指针进行了封装比如vector的迭代器就是原生态指针T* 。因此迭代器失效实际就是迭代器底层对应指针所指向的空间被销毁了而使用一块已经被释放的空间造成的后果是程序崩溃(即如果继续使用已经失效的迭代器程序可能会崩溃)。 二、vector原理 根据上图可知vector容器的成员变量主要有迭代器_start、迭代器_finish、迭代器_end_of_storage。迭代器_start指向的是vector里存第一个有效数据的位置迭代器_finish指向的是vector里存放的最后一个有效数据位置的下一个位置迭代器_end_of_storage指向的是vector里容量capacity的下一个位置。可以用_finish_end_of_storage判断vector容器的容量是否已满。 对于vector迭代器失效问题主要发生在插入insert、删除erase两个函数接口中。  对于resize、reserve、insert、assign、push_back等函数接口也会导致失效。 三、插入失效 因为在insert时vector可能需要进行扩容而扩容的本质是new一块新的空间再将数据迁移过去。而我们知道迭代器的本质是指针而插入后若vector扩容则原有的数据被释放指向原有数据的迭代器就成了野指针所以迭代器失效了。 int main(){vectorint v{ 1,2,3,4,5,6 };auto it v.begin();// 插入元素期间可能会引起扩容而导致原空间被释放v.insert(v.begin(), 0);while (it ! v.end()){cout *it ;it;}cout endl;return 0;}/*出错原因以上操作都有可能会导致vector扩容也就是说vector底层原理旧空间被释放掉而在打印时it还使用的是释放之间的旧空间在对it迭代器操作时实际操作的是一块已经被释放的空间而引起代码运行时崩溃。解决方式在以上操作完成之后如果想要继续通过迭代器操作vector中的元素只需给it重新赋值即可。*/ 解决方式让insert函数带一个返回值返回出插入元素后改元素的迭代器位置在使用改迭代器就不会造成野指针发生失效的问题了。 四、erase失效 using namespace std; int main() {int a[] { 1, 2, 3, 4 };vectorint v(a, a sizeof(a) / sizeof(int));//将数组a的元素放入v中// 使用find查找3所在位置的iteratorvectorint::iterator pos find(v.begin(), v.end(), 3);// 删除pos位置的数据导致pos迭代器失效。v.erase(pos);cout *pos endl; // 此处会导致非法访问return 0; } erase删除pos位置元素后pos位置之后的元素会往前搬移没有导致底层空间的改变理论上讲迭代器不应该会失效但是如果pos刚好是最后一个元素删完之后pos刚好是end的位置而end位置是没有元素的那么pos就失效了。因此删除vector中任意位置上元素时vs就认为该位置迭代器失效了。 删除pos位置后pos迭代器就失效了不能再使用它。为解决这个问题同样可以使用返回值返回pos迭代器的下一个位置即4的位置在使用就不会访问错误了。 结论insert/erase 的pos为位置一定不要直接访问一定要更新直接访问可能会出现各种出乎意料的结果这就是所谓的迭代器失效。不要直接访问-不要直接访问-不要直接访问
http://www.hkea.cn/news/14412191/

相关文章:

  • 信息门户网站怎么做wordpress如何编辑页面
  • 如何使用win2008iis建设网站微信手机网站开发
  • 班级网站建设网络装修平台哪家最好
  • 北京的重要的网站荆州做网站
  • 电子商务网站成本logo是黑色 怎么调网站的色调
  • 医院网站建设价格东莞关键词排名提升
  • 邢台公司网站设计西安网约车
  • 杭州网站推广宣传广州网站建设公司乐云seo
  • wordpress建站落后吗200万做网站
  • 招聘网站开发的背景企业网站建设智恒网络
  • 网站开发软件是什么专业做网站的空间在哪买
  • 新民个人网站建设优势巩义市网站建设
  • 如何看网站的建站时间做网站关于我们
  • 网站收录没了a5做网站
  • 不是万维网的网站专门做网站的公司 南阳
  • 杭州网站怎么制作那么在线crm是免费
  • 新颖的网站策划wordpress支持python吗
  • 怎么想百度提交网站免费的招聘网站
  • 网站建站个人网站开发与实现开题报告
  • 网站收录怎么做宁波seo资源
  • 网站建设是在商标哪个类别邢台网站建设厂家
  • 乌兰察布盟建设银行网站鄂州网站建设设计
  • 晋中市两学一做网站农业科技公司网站模板
  • 网站上面的彩票快3怎么做关键词搜索量全网查询
  • apmserv搭建网站做报纸网站
  • 大兴网站建设服务公司长沙网站seo技术
  • 门户网站建设的好处长沙本地推广平台
  • 宜昌手机网站制作一个公司可以做两个网站推广吗
  • 网站备案和服务器备案上海做征信服务的公司网站
  • 企业网站建设参考文献网站建设的格式