亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定

iterator使用while循環

我用while循環迭代,產生了錯誤,這是為什么。

????list<int>::iterator?iter?=?ls.begin();
????for(;?iter?!=?ls.end();?iter++)?{
????????cout?<<?*iter?<<?endl;
????}
//????while?(iter++?!=?ls.end())?{
//????????cout?<<?*iter?<<?endl;
//????}

在這邊while循環和for唯一的區別也就是iter多++了一次,這有什么關系嗎?

為什么iter多++了一次就會產生錯誤?

正在回答

2 回答

不不不,你沒理解我的意思

假設現在list里有三個元素

以你的代碼為例

list<int>::iterator?iter?=?ls.begin();??//這時iter指向第一個元素,假設此時iter?==?0x000001

開始第一次循環:

while?(iter++?!=?ls.end())?{??//因為有三個元素,假設一個內存單元存一個元素,那么ls.end()?==?0x000004,
????????????????????????????????然后先拿iter與ls.end()比較,明顯不相等,此時判斷結果為真,判斷完后,
????????????????????????????????iter自加1,也就是說,在執行輸出之前,iter就指向下一個元素了,
????????????????????????????????此時iter?==?0x000002
???????cout?<<?*iter?<<?endl;??//第一次循環輸出的是iter?==?0x000002的元素,也就是list中的第二個元素
????}

第二次循環:

while?(iter++?!=?ls.end())?{??//第一次循環結束后,iter?==?0x000002,?此時顯然iter?!=?ls.end(),
????????????????????????????????判斷為真,循環可以進行,判斷完后,立即iter自加1,
????????????????????????????????此時iter?==??0x000003,指向了list的最后一個元素
???????cout?<<?*iter?<<?endl;??//第二次循環輸出的是iter?==?0x000003的元素,也就是list中的最后一個元素
????}

第三次循環:

while?(iter++?!=?ls.end())?{??//第二次循環結束后,iter?==?0x000003,?此時顯然iter?!=?ls.end(),
????????????????????????????????判斷為真,循環可以進行,判斷完后,立即iter自加1,
????????????????????????????????此時iter?==??0x000004,指向了不存在的元素
???????cout?<<?*iter?<<?endl;??//第三次循環想輸出iter?==?0x000004的元素,但此元素不存在,
?????????????????????????????????所以系統顯示出錯
????}


你要理解后置++的運算過程,是先使用iter的值進行是否與ls.end()相等的判斷,再自加,在自加之前,第三次循環的條件是成立的,也就是會在iter自加1之后執行循環體,因此,就會導致最后一次循環出現的錯誤
你寫的代碼,等于是第一個元素沒有輸出,最后一次循環,想要輸出一個不存在的元素,故系統報錯

1 回復 有任何疑惑可以回復我~
#1

慕姐3585284 提問者

謝謝。 確實是這里搞錯了。
2016-09-30 回復 有任何疑惑可以回復我~

是可以用while的

產生錯誤的原因是因為你把iter++寫在了條件判斷處,等于說在判斷完之后,iter就指向下一個元素,當iter指向末元素的時候,iter++ != ls.end()這一項是成立的,判斷完之后,iter自加一,指向了末元素的下一個元素并進行輸出,而此時iter所指向的元素是不存在的,此時就會報錯

改正代碼

list<int>::iterator?iter?=?list1.begin();
????while?(iter?!=?list1.end())?{
????????cout?<<?*iter?<<?endl;
????????iter++;
????}

輸出之后再進行自加

0 回復 有任何疑惑可以回復我~
#1

慕姐3585284 提問者

iter指向最后一個元素的時候,就退出了。 iter++之后雖然指向了一個不存在的元素,但是循環已經退出了,并沒有執行輸出。。。
2016-09-29 回復 有任何疑惑可以回復我~

舉報

0/150
提交
取消
C++遠征之模板篇
  • 參與學習       91140    人
  • 解答問題       325    個

本C++教程力求即學即會,所有知識以實踐方式講解到操作層面

進入課程

iterator使用while循環

我要回答 關注問題
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號