STL程式設計實踐二: 注意迭代子的失效 (轉)
STL設計實踐二: 注意迭代子的失效:namespace prefix = o ns = "urn:schemas--com::office" />
迭代子是STL中很重要的特性,但是其很脆弱(我個人認為),因為使用它的條件很苛刻,一不小心就失效了。其在兩中情況下可能會失效。
1.當容器有插入操作時
在初始化了迭代子後,如果容器有插入操作時,迭代子可能失效。
#include
#include
using namespace std;
void main()
{
vector
vector
vecobj.insert(iter,6);
for(;iter!=vecobj.end();iter++)
{
cout<
}
}
當編譯並該程式時,輸出的結果亂七八糟。這是因為在初化了迭代子後,容器發生了插入操作而引起的。所以容器在發生了插入操作後迭代子需重新初始化。把上面的for語句換成下面的即可輸出正常,當然實際的應用中不可能如此簡單,但一定要小心使用。
for(iter=vecobj.begin();iter!=vecobj.end();iter++)
2.當容器有刪除元素操作時
在初始化了迭代子後,如果容器有刪除元素操作時,迭代子可能失效。
#pragma warning(disable : 4786)
#include
#include
using namespace std;
int main (void)
{
vector
vector
for(;it!=nvec.end();it++)
{
if(*it==7) nvec.erase(it);
}
for(it=nvec.begin();it!=nvec.end();it++)
{
cout<
}
return 0;
}
我們的意圖很明顯是想刪除所有容器中值為7的。但結果並沒刪除完(不要告訴我請用clear)。
當我們利用迭代子刪除和插入元素時都有可能使迭代子失效。迭代子的失效可能引起許多的問題,所以我們要注意。一定要小心的使用迭代子,一定要小心。在這個世界生存,什麼都要小心,不是嗎?:)
文章寫的倉促,有錯別字或錯誤請大家多批評指出。謝謝大家的捧場,在下感激不盡,歡迎和大家交流 (-袁凱-)。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10752043/viewspace-991357/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- STL程式設計實踐五:巢狀式的型別宣告 (轉)程式設計巢狀型別
- STL程式設計實踐三:剖析STL容器的複製構造和賦值特性 (轉)程式設計賦值
- STL程式設計實踐一:謹慎使用下標運算子 (轉)程式設計
- STL程式設計實踐七:儘量定義class形式的Function Object (轉)程式設計FunctionObject
- STL程式設計實踐四:簡化輸入和提高可維護性 (轉)程式設計
- C 程式設計最佳實踐(轉)程式設計
- C++程式設計最佳實踐(轉)C++程式設計
- STL程式設計實踐六:自定義型別儘量定義恆等和小於運算子 (轉)程式設計型別
- 設計模式之迭代子模式設計模式
- Delphi實用程式設計經驗二 (轉)程式設計
- Go程式設計實踐Go程式設計
- jQuery程式設計的最佳實踐jQuery程式設計
- Delphi實用程式設計經驗二則 (轉)程式設計
- go 程式設計師的最佳實踐Go程式設計師
- 高效前端程式設計實踐前端程式設計
- VB的API程式設計精粹(二) (轉)API程式設計
- Linux的shell程式設計(二)(轉)Linux程式設計
- 設計模式之感悟和實踐(二)設計模式
- 程式設計修養(二) (轉)程式設計
- 如何培養良好的程式設計實踐程式設計
- 用分支實現交迭
- CoreData實踐(二)——設計資料結構資料結構
- STL 的 erase() 陷阱-迭代器失效總結
- framebuffer應用程式設計實踐程式設計
- Java併發程式設計實踐Java程式設計
- Golang 併發程式設計實踐Golang程式設計
- hadoop程式設計實踐(一)Hadoop程式設計
- JS程式設計實踐指導JS程式設計
- 非同步程式設計最佳實踐非同步程式設計
- Bash 優良程式設計實踐程式設計
- XML程式設計例項(二) (轉)XML程式設計
- C++實踐:STL容器reserveC++
- 程式設計師的8個注意程式設計師
- 程式設計注意事項程式設計
- Java程式設計師的八個最佳實踐Java程式設計師
- 程式設計實踐考試的入門模板程式設計
- 專欄文章 質量保障系統的落地實踐 (二) 專案管理設計 - 程式碼資訊設計專案管理
- Android混合程式設計:WebView實踐Android程式設計WebView