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

江苏齐力建设集团网站微企点做网站怎么样

江苏齐力建设集团网站,微企点做网站怎么样,山东省农村电影监控平台下载,wordpress自动汉化版一、迭代器: 迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针,或者是对指针进行了封装,比如:vector的迭代器就是原生态指针T* 。因此迭代器失效,实际就是迭代器底层对应指针所…

一、迭代器:

迭代器的主要作用就是让算法能够不用关心底层数据结构,其底层实际就是一个指针或者是对指针进行了封装,比如: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(){vector<int> 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 };vector<int> v(a, a + sizeof(a) / sizeof(int));//将数组a的元素放入v中// 使用find查找3所在位置的iteratorvector<int>::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.yayakq.cn/news/595004/

相关文章:

  • wap网站 开发云空间搭建网站
  • 怎么做网站规划ui培训机构全国排名
  • 韩国做美食的视频网站有哪些烟台网站建设学校
  • 网站对于企业的意义百度认证官网申请
  • 手机网站锁定竖屏看代码建设银行网站201308
  • 事业单位报名网站网站建设立项
  • 国外包装设计网佛山网站优化软件
  • 外贸婚纱礼服网站怎么制作h5
  • 网站域名不备案要证书有啥用什么平台可以做推广
  • 网站规范建设群晖wordpress不成功
  • WordPress网站仿制学到什么程度可以做网站
  • 美工网站设计2022年百度seo
  • 国外哪些做问卷赚钱的网站做一个免费网站
  • 合同 制作 网站歌曲网站模板
  • 网站自适应开发深圳市营销型网站
  • 移动终端网站建设做网站 赚钱多吗
  • 做化妆品销售网站如何wordpress悬浮窗口
  • 如何做网站在售产品分析dz论坛如何做网站地图
  • 网站怎样和首页做链接WordPress二维码管理插件
  • 如何查看一个网站流量江西省建设部网站
  • 平台代理商惠州搜索引擎seo
  • 免费网站怎么申请互动平台有效学时
  • logo免费网站建设网站哪个比较好
  • 可视化网站开发软件seo信息是什么
  • 搭建网站的价格wordpress 作者
  • 网站开发仿站邯郸建设局网站资质申报
  • 网站更换空间需要怎么做石家庄做网络推广的公司
  • 辽宁响应式网站建设推荐怎么做免费网站推广
  • 青海省城乡建设厅网站首页qq是用什么开发的
  • 网站建设分析方法国外企业网页设计