为什么STL容器比MFC容器更受欢迎?
为什么STL容器比MFC容器更受青睐?
在2006年6月,VC++产品经理Ronald Laeremans甚至建议使用STL:
“而且实际上,团队也会给出同样的答案。MFC集合类仅用于向后兼容。C++有一套用于集合类的标准库,那就是标准C++库。在使用MFC应用程序中的任何标准库方面都没有技术上的缺点。
我们不打算在这个领域进行重大更改。”
Ronald Laeremans
临时产品经理
Visual C++团队
然而,在我曾经负责的一段时间里,我在Windows的安装阶段运行的某些代码中不允许使用STL容器,而是要求使用ATL容器(实际上是特定的CString,我猜这并不是真正的容器)。解释是STL容器对运行时位有依赖,这些依赖在代码执行时可能实际上并不可用,而ATL集合没有这些问题。这是一个相当特殊的情况,不会对99%的代码产生影响。
CString实际上并不是一个容器(除非从非常技术层面来看),它具有许多方便的功能,使得在处理Win32和COM API时更加合适使用。
“解释是STL容器对运行时位有依赖,这些依赖在代码执行时可能实际上并不可用”... 现在我想看看STL中关于容器的代码的部分。尽管有些可选的调试检查,但对于纯发布版本的STL集合来说,我认为它们都是纯头文件,没有涉及任何运行时位。(快速检查C++STDLIB MSVCP*.DLL也没有找到任何与容器相关的导出函数。)
我猜测这可能是微妙的问题:可能是在std::allocator
我怀疑当时MS使用的C++编译器是否足够支持STL。
为什么STL容器优于MFC容器?
在软件开发中,STL(Standard Template Library)容器被普遍认为优于MFC(Microsoft Foundation Class)容器。下面将从以下角度解释为什么STL容器更受青睐,并提供了一些解决方法。
1. 兼容性:STL容器与其他库(如Boost)在语法、互操作性和范式上具有兼容性。这是一个非常重要的优势,因为它使得开发人员可以更轻松地在不同的项目中使用不同的库,并且可以减少代码的重写和调整。
2. 技能发展:使用STL容器将培养一套技能,这些技能在其他环境中更有用。相比之下,MFC已经不再被广泛使用,而STL的使用则更加普遍。因此,通过使用STL容器,开发人员可以更好地适应当前软件开发的趋势和需求。
3. 开发思维:使用STL容器会培养一种思维方式,无论您是否在自己编写的代码中使用它,这种思维方式都可能非常有用。STL容器遵循一些通用的设计原则和范式,如迭代器、算法和泛型编程,这些思维方式可以帮助开发人员更好地组织和管理他们的代码。
然而,并不是说使用STL容器就是错误的。根据具体的项目需求和开发环境,选择合适的容器是非常重要的。在某些情况下,MFC容器可能仍然是一个不错的选择,特别是在使用MFC框架的项目中。因此,开发人员需要根据实际情况权衡选择。
总结起来,STL容器优于MFC容器的原因包括兼容性、技能发展和开发思维。这些优势使得STL容器成为开发人员更常用和更有价值的选择。然而,根据具体需求选择适合的容器是至关重要的。无论选择哪种容器,都应该根据项目需求和开发环境做出明智的决策。
为什么STL容器比MFC容器更受青睐?
STL(Standard Template Library)容器相对于MFC(Microsoft Foundation Class)容器更受青睐的原因有以下几点。
首先,STL容器具有性能保证。STL容器的实现经过高度优化,可以提供一定的性能保证,这使得它们在处理大规模数据时表现出色。
其次,STL容器可以与STL算法一起使用,而STL算法也具有性能保证。STL算法是与STL容器配套的一组标准算法,它们经过严格测试和优化,可以在不同的STL容器上高效地工作。
第三,STL容器可以被第三方C++库(如Boost)利用。STL容器是C++标准库的一部分,被广泛应用于各种开源库和框架中。这意味着如果我们选择使用STL容器,我们可以更方便地与其他第三方库进行集成和交互。
第四,STL容器是标准的,很可能会比专有解决方案更长久地存在。STL容器是C++标准的一部分,保持了稳定的接口和语义,这使得它们具有更好的兼容性和可移植性。相比之下,MFC容器是微软自家的解决方案,可能会面临版本迭代和兼容性问题。
最后,STL容器鼓励通用算法和数据结构的编写。如果我们编写符合STL标准的新算法和数据结构,我们可以充分利用STL已经提供的功能,而无需额外付出成本。
STL容器相对于MFC容器更受青睐的原因主要包括性能保证、与STL算法的配合、第三方库的支持、标准化和通用编程的推广。在选择容器时,我们应考虑以上因素,并权衡利弊,选择适合自己需求的容器。