关于MFC和STL的使用
更新时间:2023-06-05 10:16:01 阅读量: 实用文档 文档下载
- 关于mfc的书籍推荐度:
- 相关推荐
关于MFC和STL的使用
赵湘宁
问题:
我在几个不同的地方读过有关STL的内容,但还是不知道在我的应用程序中到底是用STL还是用MFC?我的程序也处理string,vectors等东西。使用STL和MFC到底有什么不同?
解答:
要回答“我应该使用哪一个?”这样的问题,答案几乎都一样。它依赖于你想做什么,你的应用程序的种类以及你的知识。还有你的C++资格认证也很重要。当你需要快速做某件事情时,最好是利用你最熟悉的工具。如果你想要处理文本,而你有熟悉MFC的话,CString为首选。如果你熟悉STL,那就用string取代MFC。在这个世界上,你选择哪一个并不重要。使用string,list,或者大把的类都一样可以做好。但是有时要说这个或者哪个系统更好需要时间。例如,最近的一篇文章中有个例子程序RECYCLE,其中我就是用了STL,为什么呢?
当我开始写这个程序时,我将它写成一个MFC的控制台应用——只因为我已经由一个写好的模板控制台应用。但是重新看了代码之后(你肯定也常常遇到这种情况)。我使用的都是MFC的CString和CstringList。因为程序要解析命令行参数,RECYCLE要建立一个删除文件的名字列表,文件名字都是CString类型的。如果仅仅为了处理串和列表而链接MFC的话似乎有些浪费资源。CStringList需要引入整个afxcoll.obj,CString需要加载strcore.obj,并且AfxWinInit肯定要初始化需要的模块。如果你不看映射文件,你绝对想象不到MFC要加载些什么东西。其实根本不用看,我就知道RECYCLE应该使用STL效率更高。
为了将程序转换到STL并删除所有MFC的跟踪代码,我只要改为数不多的几行代码就可以了。首先,我#include和,然后为方便起见,添加一个类型定义: // 串列表
typedef list CStringList;
只有名字与MFC相同,而接口已经完全变了。尤其是STL使用iterators代替了POSITIONs。
CStringList files; // 文件名字列表
…
CStringList::iterator i;
for (i=files.begin(); i!=files.end(); i++) {
…
}
比较之下,我发现STL的iterators比MFC的POSITIONs更容易记忆。不知
什么原因,我总是记不住POSITIONs的使用方法,每次总是要去查手册,而begin/end 和 i++语法对我来说轻车熟路。另一方面,我希望STL有一个转换函数用于将string转成LPCTSTR,就像CString那样:
CString s; // MFC
LPCTSTR pstr = s; // 调用 "CString::operator LPCTSTR() const;"
MFC的转换函数很棒,使用它可以将某个CString传到任何可以传指针的的C串中。可以让你写如下的代码:
CString s = "whatever";
MyFunc(s); // MyFunc 想要 LPCTSTR
而如果使用STL,你必须显式地调用string::c_str.
string s;
MyFunc(s.c_str());
也许STL的设计者认为转换函数容易引起混乱,确实是这样,正是因为如此才造就了整个STL设计。每次只要已涉及到STL代码就犯难,主要的问题是类型。使用STL的一个更重要的理由当然是可移植性。STL是C++标准的一部分,就像printf,,tolower,strcpy等是C标准的一部分一样。我总是感觉到可移植性有一些问题,因为大多数程序它依赖于平台。其它操作系统有
SHFileOperation吗?没有。然而,尽可能将平台依赖程度降至最小,STL能帮你做到。任何想要与ANSI兼容的编译器必须支持STL。但这种支持并不总是充分和成功。尤其是微软将STL看成一种负担,而不是把它当成一种好技术来对待。这显然是非常不明智的。
另一方面,公正地讲,STL确实很神秘,表现在其内容划分、发生器以及容器等方面。并且它的模板代码总是让人不可接近(有点像ATL),阅读STL代码对所有人都是个严重的挑战。但Unix程序员可能体会到了STL所包含的东西,如果你熟悉了STL的那些单调乏味的术语,意想不到的函数名以及高度概括的代码,如果你能驾驭它们,那种感觉好极了。不久你就会融入到其中并发现STL的功能是多么强大,并且易于使用。STL遵循Unix的系统惯例,象SED,AWK和Emacs——难于学习,但功能强大并易于使用(我坦白承认打死都不会用Emacs)。如
果你真想做一些低级编程,那就认识STL吧!哪里能找到更多的有关STL的内容呢?网络上有很多关于STL的站点。只要用“Standard Template Library”或“STL”来搜索就可以找到一大把。最有名的一个站点是:
/Technology/STL/index.html
你可以从上面找到容易理解文档和FAQ页面。
最后祝你编程愉快!
正在阅读:
关于MFC和STL的使用06-05
12药本临床药学复习题(1)09-18
人教版二下数学8单元《克和千克》测试题09-10
铝电解电流效率理论与实践的新认识07-26
2018.8福师《英语写作》复习资料集《习题+答案》03-08
第6课《行程问题》 Word版 含解析 小学四年级上册数学奥数知识点08-24
《写给男人的第一本怀孕书》读后感10篇12-12
游北京长城作文02-04
初级会计学习口诀03-08
《无知》读后感10篇03-15
- 教学能力大赛决赛获奖-教学实施报告-(完整图文版)
- 互联网+数据中心行业分析报告
- 2017上海杨浦区高三一模数学试题及答案
- 招商部差旅接待管理制度(4-25)
- 学生游玩安全注意事项
- 学生信息管理系统(文档模板供参考)
- 叉车门架有限元分析及系统设计
- 2014帮助残疾人志愿者服务情况记录
- 叶绿体中色素的提取和分离实验
- 中国食物成分表2020年最新权威完整改进版
- 推动国土资源领域生态文明建设
- 给水管道冲洗和消毒记录
- 计算机软件专业自我评价
- 高中数学必修1-5知识点归纳
- 2018-2022年中国第五代移动通信技术(5G)产业深度分析及发展前景研究报告发展趋势(目录)
- 生产车间巡查制度
- 2018版中国光热发电行业深度研究报告目录
- (通用)2019年中考数学总复习 第一章 第四节 数的开方与二次根式课件
- 2017_2018学年高中语文第二单元第4课说数课件粤教版
- 上市新药Lumateperone(卢美哌隆)合成检索总结报告
- 使用
- 关于
- MFC
- STL
- 关于春节的开幕词范文
- 中国银行上市基本面浅析
- 江西省临川一中2012届高三数学4月模拟考试 理 新人教A版【会员独享】
- 有效班级管理中的心理调适
- 连锁店高清网络视频监控解决方案
- 事业单位分类改革
- 八年级第二学期物理期末模拟试卷 上海科技出版社
- Viton氟橡胶的性能及其应用
- 现代控制理论作业
- 虚拟主机服务条款
- 2014年高考英语复习精典素材――2.历年高考完形填空常用词汇总结
- 国军标(GJB)汇总概要
- 玻璃钢水箱的价格决定因素
- 四年级小学生阅读书目
- 干旱、半干旱区生物土壤结皮遥感光谱研究进展
- 城市重大危险源应急物流网络研究
- 某排水工程规划及污水处理厂毕业设计说明书_secret
- 2018年中国共产党党史知识竞赛试题(单选题100道)附全部答案
- 2012职称英语阅读理解_背诵模板【综合类】
- 2013年生产部工作总结