關於c++primer的一個代碼錯誤

最近看c++primer第四版的標準容器vector,講到對vector容器的插入刪除元素會使得end()的迭代器失效的問題,所以不建議程序員對end()的存儲。

vector<int> vec;
vector<int>::iterator first=vec.begin();
while(first!=vec.end())
{
     first=vec.insert(first,12);
     first++;
}
上面的這段代碼來自c++primer書中,但是如果我們去運行這樣的程序是不能結束的,會無限循環;

這時我們如果仔細的閱讀上面的這段代碼的話會發現這段代碼的確是無限循環的,因爲insert函數返回的新插入元素的迭代器,這樣的話是永遠不可能等於end()的。

修改方法:

將first++改爲first+=2;
這樣再運行這樣的程序就可以執行了。


發佈了57 篇原創文章 · 獲贊 35 · 訪問量 2萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章