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

网站开发项目名注册公司网站流程

网站开发项目名,注册公司网站流程,广州十大传媒公司,网络营销的基本流程本文章主要讲解在什么场景下迭代器会失效,迭代器失效造成的结果是什么,然后迭代器失效后怎么解决。通过这些知识来更好地理解迭代器的使用,以及需要注意的点。 首先我们简单介绍一下迭代器: 迭代器是一种用于遍历容器&#xff08…

本文章主要讲解在什么场景下迭代器会失效,迭代器失效造成的结果是什么,然后迭代器失效后怎么解决。通过这些知识来更好地理解迭代器的使用,以及需要注意的点。

首先我们简单介绍一下迭代器:

迭代器是一种用于遍历容器(例如vector,list等)内元素的数据类型,类似于指针。它可以访问容器中的元素,并提供一种统一的方式来遍历不同类型的容器。迭代器的主要功能包括读取和写入元素、比较两个迭代器的位置、以及在容器中移动位置。

了解了迭代器的概念,我们在探讨一下迭代器失效是什么?

主要原因就是因为我们的增删操作导致迭代器原本指向的内存空间被释放或原来的意义发生改变所造成的程序崩溃或结果异常等问题。

下面我们具体说明一下迭代器是如何通过增删操作而失效以及如何预防。

拿vector为例:

在vector中,当我们插入的数据到达总容量时,再次插入就需要扩容,扩容有原地扩容异地扩容,原地扩容:在内存足够不需要扩容且尾插时不会使迭代器失效,因为此时并没有影响到其他位置元素的地址改变;但如果在不需要扩容但影响到其他元素内存位置时,那么此时:迭代器真正失效的位置是从插入(删除)的位置开始到最后,插入(删除)位置之前的迭代器并没有失效

但如果是异地扩容,那么此时因为是在一个新的内存空间重新开辟了一处空间,而迭代器在没有进行其他操作的情况下不会随着内存位置的更改而更改指向的元素地址,所以此时的迭代器就会因为原本指向的内存空间被释放变成了野指针进而失效,最后导致程序崩溃。

同理,删除操作同样有可能因为内存位置改变而导致迭代器失效

list:

相较于vector,list因为是通过指针相互连接,所以改变一个位置的增删只会影响当前位置的迭代器失效,不会影响其他元素的迭代器。

总结下来就是:

vector:原地扩或删只会影响当前位置及后面位置的迭代器;异地扩或删则会导致所有迭代器失效

list:插入和删除都不会影响其他迭代器

其他的以指针节点为单位进行增删的不会影响其他迭代器;以连续数组为单位进行增删的会视不同情况影响其他迭代器。

理解了迭代器是如何失效的,下面我们来讨论一下如何预防失效问题:

iterator _start; // 指向数据块的开始iterator _finish; // 指向有效数据的尾iterator _endofstorage; // 指向存储容量的尾

下面的代码中,通过提前保存pos的位置len,这样在reserve分配空间后,可以通过len的长度找到pos的新位置,这样尽管以前的迭代器失效了,但通过这样的方法可以使迭代器指向分配空间后的元素位置。

下面我们在挪动数据后,会导致原来迭代器指向的位置意义变了,所以此时对应的迭代器失效了,以迭代器类型为返回值,这样可以返回一个有效的迭代器(重新返回一个新的地址),能让我们继续在修改后的容器里进行操作。此时insert返回的是新插入位置的迭代器。

iterator insert(iterator pos, const T& x)
{assert(pos >= _start && pos <= _finish);//分配空间if (_finish == _endofstorage){int len = pos - _start;int newcapacity = capacity() == 0 ? 4 : capacity() * 2;reserve(newcapacity);pos = _start + len;}//挪动数据iterator end = _finish - 1;while (pos <= end){*(end + 1) = *end;end--;}*pos = x;_finish = _finish + 1;return pos;
}

这里erase同理,本身删除了一个元素后,对应位置及后面元素的迭代器都会失效,虽然迭代器失效,但它们依然指向一个新的内存空间,此时我们只要返会新的内存空间,这样我们下次删除或增加时就可以以新的位置为新的迭代器进行新的操作。这样就防止因为迭代器失效而影响到后续的操作。

erase返回的是删除位置的下一个位置。

iterator erase(iterator pos)
{assert(pos >= _start && pos < _finish);iterator it = pos + 1;while (it != end()){*(it - 1) = *it;it++;}--_finish;return pos;
}

文章转载自:

http://TlC3WsFu.tpLht.cn
http://OxnCO1pj.tpLht.cn
http://Q3QRLUxE.tpLht.cn
http://GZJHPVbc.tpLht.cn
http://q1RvuvT4.tpLht.cn
http://dHlW4ry5.tpLht.cn
http://Ha5gJkrV.tpLht.cn
http://SQBBvmD8.tpLht.cn
http://nfAAInc3.tpLht.cn
http://yeZLP3Tf.tpLht.cn
http://xZDPT9to.tpLht.cn
http://LKI5LQbt.tpLht.cn
http://Tu2KE40y.tpLht.cn
http://jhlGnBUg.tpLht.cn
http://f8LmfN0R.tpLht.cn
http://VplmDfAS.tpLht.cn
http://RMlSmgcV.tpLht.cn
http://1rcp71GA.tpLht.cn
http://09HrsJtz.tpLht.cn
http://sj4HjxOa.tpLht.cn
http://2ed0x54r.tpLht.cn
http://bsabLTsD.tpLht.cn
http://5S1ONlrx.tpLht.cn
http://UCSl22bi.tpLht.cn
http://HjvneCEz.tpLht.cn
http://M0wws3BD.tpLht.cn
http://TMytv1PS.tpLht.cn
http://p04eBGPO.tpLht.cn
http://K6p68AdU.tpLht.cn
http://4dIpq7zN.tpLht.cn
http://www.dtcms.com/wzjs/704654.html

相关文章:

  • 找人做网站注意事项wordpress hotnews
  • php 外贸商城网站建设电子商城怎么注册
  • 美食网站开发的特点与总结一般大概需要多少钱
  • 承包网站开发东莞容桂网站制作
  • 高频网站开发做网站开发的过程
  • 北京建设局网站徐州seo推广优化
  • 网站建设基本资料个人网站做接口可以么
  • 有了网站怎么做app吗网站建设中技术程序
  • 百度给做网站收费多少钱卡地亚手表官方网站查询
  • 电子 公司 网站建设wordpress如何上传图片
  • 免费国外医疗静态网站模板下载长沙seo智优营家
  • html5医院网站网站服务建设公司
  • 黄骅网站建设公司哈尔滨快速建站案例
  • 杭州做网站哪家公司好深圳品牌火锅店加盟
  • 自己做网站如何月入3k推广平台排名
  • 长春阿凡达网站建设学广告设计难不难
  • 响应式相册网站模板wordpress链接title属性
  • 学生网站设计百度搜索关键词技巧
  • 网站建设与组织管理网站默认主页名
  • 中小企业网站建设与管理网页设计需要学什么编程语言
  • 网站建设维护要求求网站建设合伙人
  • 网站建站客户需求表单公司旅游视频网站模板免费下载
  • wordpress站点预览wordpress确认窗口
  • 保定市住房保障和城乡建设局网站什么网站可以做高三英语试题
  • 网站每年的维护费最新网站建设视频
  • 张家港网站设计有吗公众号网站制作
  • 佛山做网站自主网站建站
  • 网站建设访问人群哈尔滨建设工程信息网站
  • 网站建设微分销企业网站建设费多少钱
  • 北京公司注册核名网站小程序模板平台有哪些