STL使用入門( Using STL)
作者:Zoran M. Todorovic原文:Using STL.
翻譯:Winter
0 前面的話(Winter)
C++已經在中國相當普及,但C++ STL卻使用的人不多。許多人有一定成見,認爲STL降低了C++的效率。特別是那些自詡爲技術專家的人,他們一直使用C語言,對於新事物總是先用批判的眼光對待......先不說這些,我這幾天看見http://stl.winterxy.com網站上的這篇小文,發現寫得簡明扼要,通俗易懂。翻譯出來,希望對STL的普及有一定幫助。1 介紹
我最開始結束C++編程是從DOS下的Borland C++開始的。那時他們在最新版本3.1中就包含了一套模板庫用來做collection.那真是個好東東。當我開始使用Visual C++ 2.2的時候,我甚至試圖去把Borland公司的collection模板庫嵌入到Visual C++中去,但是沒有成功。唯一可行的解決方案是切換到微軟(Microsoft)的collection上,它是MFC的一部分分。但總是有些問題,其原因如下:- 一旦實現部分已經代碼寫完,很難從一種容器(container)類型切換到另外一種容器。
- 不同容器的迭代器(Iterators)不一樣。
- 如果你在寫一個DLL(動態鏈接庫), 服務程序(service)或者終端應用程序,需要用到容器,你要麼動態要麼靜態鏈接MFC,這使得你不得不依賴於MFC.
最近我開始使用STL,發現它真是太棒了!入門可能稍微難一些,但一旦你開始了,它就變得非常容易。本文包含了一些使用STL的入門經驗,主要是面向那些希望能快速使用STL又不想了解那些瑣碎細節的程序員。
2 規則
Rule 1:
你可以生成STL容器,用來存放對象或者指向對象的指針。
TMyClass; list<TMyClass> TMyClassList; list<TMyClass*> TMyClassPtrList;
如果容器是保存的對象,則在容器析構的時候會自動清理這些對象。但,如果它保存的是對象的指針,刪除指針就應該是程序員的責任了。
Rule 2
對需要保存到容器中的對象的類型來說,每個類都必須至少實現拷貝構造函數,最好還能重載賦值操作符。
TMyClass { : ... : TMyClass(..); TMyClass( TMyClass& obj) { * = obj; } TMyClass& =( TMyClass& obj); ... };
Rule 3:
按照下列方式把一個對象插入到容器中:
TMyClass object; TMyClassList myList; TMyClassList::iterator it; it = myList.insert(myList.end(), object); TMyClass *pObject = &(*it);
Rule 4:
通過下面的方式,使用迭代器遍歷整個容器:
TMyClassList::iterator it; TMyClass *pObject; (it = myList.begin(); it != myList.end(); it ++) { pObject = &(*it); }
TMyClassList::iterator it; TMyClass *pObject; (it = myList.begin(); it != myList.end(); it ++) { pObject = *it; }
Rule 5:
按照下面的方法可以刪除容器中的元素:
TMyClassList::iterator it; TMyClass *pObject; (it = myList.begin(); it != myList.end(); it ++) { pObject = &(*it); (pObject 滿足某些刪除的標註) then myList.erase(it); pObject; }