我在几个不同的地方读过有关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<string>和<list>,然后为方便起见,添加一个类型定义: // 串列表 typedef list<string> 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”来搜索就可以找到一大把。最有名的一个站点是: http://www.sgi.com/Technology/STL/index.html 你可以从上面找到容易理解文档和FAQ页面。
最后祝你编程愉快! |
相关推荐
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)和OpenGL库来读取并显示STL(Stereo Lithography)格式的三维模型。STL是一种广泛用于3D打印和计算机辅助设计(CAD)的文件格式,它包含了物体...
在MFC(Microsoft Foundation Classes)框架中处理STL文件,可以实现对3D模型的读取和显示,为用户提供交互式的观察体验。 在"MFC STL格式形体的读取与显示"中,我们需要理解以下几个关键知识点: 1. STL文件结构...
在本文中,我们将深入探讨如何使用MFC(Microsoft Foundation Classes)和OpenGL库来读取并显示STL(Stereo Lithography)格式的三维模型。STL是一种广泛用于3D打印和计算机辅助设计(CAD)的文件格式,它描述了物体...
MFC+OpenGL三维绘图(二)——打开一个...要显示其他stl文件 只需要修改OpenGLDrawingView.cpp文件 125行和129行的stl文件路径 .stl和.txt都可以读取 多个stl文件拼接的python代码 为OpenGLDrawing文件夹中的test.py
资源中包含了使用MFC的示例代码和使用STL的示例代码 Zippe(使用STL的示例代码)只能在release STL配置下编译通过 本压缩包是ZipArchive的GPL版本,通过研究这些代码对熟悉压缩算法,MFC和STL都有一定的帮助。
MFC 自带的STL正则表达式功能与标准的正则表达式库有些许差异,因此在使用时需要特别注意。 本文将详细介绍如何在MFC中利用STL进行正则表达式操作,并探讨与主流正则表达式规则的不同之处。 首先,MFC中的正则...
Software Application Development: A Visual C++, MFC, and STL Tutorial (Chapman & Hall/CRC Computer and Information Science Series) 1st Edition 2012年出版的MFC书 无水印pdf 0分 Paperback: 1216 pages ...
SAGA可能使用了STL和MFC的一些特性,比如利用STL的容器和算法进行数据处理,或者在Windows环境下使用MFC进行图形界面的开发。 学习STL和MFC可以帮助C++开发者提高效率,减少错误,并且能够编写出更加稳定、可维护的...
本文将深入探讨如何使用MFC(Microsoft Foundation Classes)程序通过OpenGL库来读取并显示STL文件,以及在不同开发环境中,如VC6和VS2008中的实现差异。 首先,MFC是微软提供的一个C++类库,用于构建Windows应用...
这款应用程序的开发基于Microsoft Foundation Classes (MFC)库,并充分利用了Standard Template Library (STL)中的vector容器,旨在帮助学习者更好地理解和运用这两种重要的编程工具。 首先,我们来深入探讨一下MFC...
MFC(Microsoft Foundation Classes)和STL(Standard Template Library)是两个广泛使用的库,它们提供了强大的工具来处理字符串。"VC_CIVStringSet.rar"这个压缩包显然包含了一个自定义的字符串类"VC_CIVStringS...
MFC(Microsoft Foundation Classes)是微软提供的一套C++库,用于简化Windows应用程序开发。它封装了Windows API,使得开发者可以...在实际项目中,MFC、C++和STL的结合使用能让你编写出高效、健壮的Windows应用程序。
在描述中提到的“MFC序列化到xml文档,支持STL的vector,map,pair”是一个扩展,使得MFC能够处理标准模板库(STL)中的容器,如vector、map和pair,将它们序列化到XML文档中。 XML(eXtensible Markup Language)...
总之,C++开发中涉及的API文档、STL、Windows API和MFC都是开发者必备的知识点,它们共同构成了C++丰富的生态系统,为解决各种问题提供了强大的工具。深入理解并熟练运用这些工具,能够提升我们的编程效率,创作出高...
VS13 MFC工程代码, 示例如何使用glfw通过opengl显示xyz文件以及stl文件. 代码中使用到的glfw是进过稍微修改过后的, 可以直接支持将创建的窗口集成到MFC控件中. 代码结构清晰, 使用示例简单. 详情可以查看博客: ...
在学习过程中,你可以通过压缩包内的应用程序了解STL和MFC如何协同工作,通过查看源代码来深入理解每种容器和算法的使用场景。记住,复制代码到编译器之前,确保你的环境已包含必要的库支持,如STL和MFC库。然后,...
本文旨在详细介绍如何利用 VC++2012 和 MFC (Microsoft Foundation Classes) 调用 TetGen 来对 STL (Standard Triangle Language) 文件进行四面体剖分。四面体剖分是一种三维几何处理技术,广泛应用于有限元分析、...
2. OpenGL编程:设置OpenGL环境,使用OpenGL绘制STL模型,应用视图和模型变换。 3. VC++界面开发:利用MFC或类似库创建用户界面,处理鼠标事件。 4. 鼠标交互:实现鼠标旋转模型的功能,通过更新视角矩阵实现3D旋转...
《Visual C++ MFC实例教程》通过丰富的实例来展示如何使用MFC的各种组件和功能,让读者能够快速理解和掌握MFC编程的核心概念,比如窗口创建、消息处理、控件与对话框的使用等。对于希望从事Windows平台软件开发的C++...
现在,你可以使用MfcCollectionWrapper和MfcIterator像操作STL容器一样操作MFC集合了。例如: ```cpp MfcCollectionWrapper wrapper(someMfcCollection); for (auto it = wrapper.begin(); it != wrapper.end(); ++...