为什么STL容器比MFC容器更受欢迎?

10 浏览
0 Comments

为什么STL容器比MFC容器更受欢迎?

以前,我习惯使用MFC的集合类,如CArray和CMap。过了一段时间后,我转而使用STL容器,并且一直在使用。尽管我觉得STL更好,但我无法准确指出具体原因。其中一些原因如下:

  1. 它需要MFC:不成立,因为程序的其他部分使用了MFC
  2. 它与平台相关:不成立,因为我只在Windows上运行我的应用程序(不需要可移植性)
  3. 它在C++标准中定义:没错,但MFC容器仍然可以工作

我能想到的唯一原因是我可以在容器上使用算法。还有其他我忽略的原因吗 - 是什么使STL容器比MFC容器更好?

0
0 Comments

为什么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::allocate的实现细节、异常类等方面。

我怀疑当时MS使用的C++编译器是否足够支持STL。

0
0 Comments

为什么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容器成为开发人员更常用和更有价值的选择。然而,根据具体需求选择适合的容器是至关重要的。无论选择哪种容器,都应该根据项目需求和开发环境做出明智的决策。

0
0 Comments

为什么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算法的配合、第三方库的支持、标准化和通用编程的推广。在选择容器时,我们应考虑以上因素,并权衡利弊,选择适合自己需求的容器。

0