MFC和STL使用教學(xué)研究_第1頁
MFC和STL使用教學(xué)研究_第2頁
MFC和STL使用教學(xué)研究_第3頁
MFC和STL使用教學(xué)研究_第4頁
MFC和STL使用教學(xué)研究_第5頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

1/1關(guān)于MFC和STL使用-教學(xué)研究

關(guān)于MFC和STL的使用

趙湘寧

問題:

我在幾個(gè)不同的地方讀過有關(guān)STL的內(nèi)容,但還是不知道在我的應(yīng)用程序中究竟是用STL還是用MFC?我的程序也處理string,vectors等東西。使用STL和MFC究竟有什么不同?

解答:

要回答“我應(yīng)當(dāng)使用哪一個(gè)?”這樣的問題,答案幾乎都一樣。它依靠于你想做什么,你的應(yīng)用程序的種類以及你的學(xué)問。還有你的C++資格認(rèn)證也很重要。當(dāng)你需要快速做某件事情時(shí),最好是利用你最熟識(shí)的工具。假如你想要處理文本,而你有熟識(shí)MFC的話,CString為首選。假如你熟識(shí)STL,那就用string取代MFC。在這個(gè)世界上,你選擇哪一個(gè)并不重要。使用string,list,或者大把的類都一樣可以做好。但是有時(shí)要說這個(gè)或者哪個(gè)系統(tǒng)更好需要時(shí)間。例如,最近的一篇文章中有個(gè)例子程序RECYCLE,其中我就是用了STL,為什么呢?

當(dāng)我開頭寫這個(gè)程序時(shí),我將它寫成一個(gè)MFC的掌握臺(tái)應(yīng)用——只由于我已經(jīng)由一個(gè)寫好的模板掌握臺(tái)應(yīng)用。但是重新看了代碼之后(你確定也經(jīng)常遇到這種狀況)。我使用的都是MFC的CString和CstringList。由于程序要解析命令行參數(shù),RECYCLE要建立一個(gè)刪除文件的名字列表,文件名字都是CString類型的。假如僅僅為了處理串和列表而鏈接MFC的話好像有些鋪張資源。CStringList需要引入整個(gè)afxcoll.obj,CString需要加載strcore.obj,并且AfxWinInit確定要初始化需要的模塊。假如你不看映射文件,你肯定想象不到MFC要加載些什么東西。其實(shí)根本不用看,我就知道RECYCLE應(yīng)當(dāng)使用STL效率更高。

為了將程序轉(zhuǎn)換到STL并刪除全部MFC的跟蹤代碼,我只要改為數(shù)不多的幾行代碼就可以了。首先,我#include和,然后為便利起見,添加一個(gè)類型定義://串列表

typedeflistCStringList;

只出名字與MFC相同,而接口已經(jīng)完全變了。尤其是STL使用iterators代替了POSITIONs。

CStringListfiles;//文件名字列表

CStringList::iteratori;

for(i=files.begin;i!=files.end;i++){

}

比較之下,我發(fā)覺STL的iterators比MFC的POSITIONs更簡(jiǎn)單記憶。不知

什么緣由,我總是記不住POSITIONs的使用方法,每次總是要去查手冊(cè),而begin/end和i++語法對(duì)我來說輕車熟路。另一方面,我盼望STL有一個(gè)轉(zhuǎn)換函數(shù)用于將string轉(zhuǎn)成LPCTSTR,就像CString那樣:

CStrings;//MFC

LPCTSTRpstr=s;//調(diào)用CString::operatorLPCTSTRconst;

MFC的轉(zhuǎn)換函數(shù)很棒,使用它可以將某個(gè)CString傳到任何可以傳指針的的C串中。可以讓你寫如下的代碼:

CStrings=whatever;

MyFunc(s);//MyFunc想要LPCTSTR

而假如使用STL,你必需顯式地調(diào)用string::c_str.

strings;

MyFunc(s.c_str);

或許STL的設(shè)計(jì)者認(rèn)為轉(zhuǎn)換函數(shù)簡(jiǎn)單引起混亂,的確是這樣,正是由于如此才造就了整個(gè)STL設(shè)計(jì)。每次只要已涉及到STL代碼就犯難,主要的問題是類型。使用STL的一個(gè)更重要的理由當(dāng)然是可移植性。STL是C++標(biāo)準(zhǔn)的一部分,就像printf,,tolower,strcpy等是C標(biāo)準(zhǔn)的一部分一樣。我總是感覺到可移植性有一些問題,由于大多數(shù)程序它依靠于平臺(tái)。其它操作系統(tǒng)有

SHFileOperation嗎?沒有。然而,盡可能將平臺(tái)依靠程度降至最小,STL能幫你做到。任何想要與ANSI兼容的編譯器必需支持STL。但這種支持并不總是充分和勝利。尤其是微軟將STL看成一種負(fù)擔(dān),而不是把它當(dāng)成一種好技術(shù)來對(duì)待。這明顯是特別不明智的。

另一方面,公正地講,STL的確很神奇,表現(xiàn)在其內(nèi)容劃分、發(fā)生器以及容器等方面。并且它的模板代碼總是讓人不行接近(有點(diǎn)像ATL),閱讀STL代碼對(duì)全部人都是個(gè)嚴(yán)峻的挑戰(zhàn)。但Unix程序員可能體會(huì)到了STL所包含的東西,假如你熟識(shí)了STL的那些單調(diào)乏味的術(shù)語,意想不到的函數(shù)名以及高度概括的代碼,假如你能駕馭它們,那種感覺好極了。不久你就會(huì)融入到其中并發(fā)覺STL的功能是多么強(qiáng)大,并且易于使用。STL遵循Unix的系統(tǒng)慣例,象SED,AWK和Emacs——難于學(xué)習(xí),但功能強(qiáng)大并易于使用(我坦白承認(rèn)打死都不會(huì)用Emacs)。如

果你真想做一些低級(jí)編程,那就熟悉STL吧!哪里能找到更多的有關(guān)STL的內(nèi)容呢?網(wǎng)絡(luò)上有許多關(guān)于STL的站點(diǎn)。只要用“StandardTemplateLibrary

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論