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多++了一次就會產生錯誤?
2016-09-29
不不不,你沒理解我的意思
假設現在list里有三個元素
以你的代碼為例
開始第一次循環:
第二次循環:
第三次循環:
你要理解后置++的運算過程,是先使用iter的值進行是否與ls.end()相等的判斷,再自加,在自加之前,第三次循環的條件是成立的,也就是會在iter自加1之后執行循環體,因此,就會導致最后一次循環出現的錯誤
你寫的代碼,等于是第一個元素沒有輸出,最后一次循環,想要輸出一個不存在的元素,故系統報錯
2016-09-29
是可以用while的
產生錯誤的原因是因為你把iter++寫在了條件判斷處,等于說在判斷完之后,iter就指向下一個元素,當iter指向末元素的時候,iter++ != ls.end()這一項是成立的,判斷完之后,iter自加一,指向了末元素的下一個元素并進行輸出,而此時iter所指向的元素是不存在的,此時就會報錯
改正代碼
輸出之后再進行自加