2009-02-18 112 views
5

我正在学习C++和我正在阅读的书(C++编程语言)说,不要重新发明轮子,依靠标准库。在C语言中,我经常最终创建一个链表,并重复链接列表迭代(也许我做错了不确定),所以用C++提供的容器的想法,字符串和算法真的吸引我。不过,我在线阅读了一些内容,并听到了朋友和同事对STL的一些批评,所以我想我可能会在这里选择一些大脑。什么是一些C++标准库使用最佳实践?

什么是使用STL的一些最佳实践,以及您了解STL的经验教训?

+0

我会对STL的投诉感兴趣,所以我们可以将它们击落。 – 2009-02-18 17:23:18

+0

马丁,我的投诉是易用性。当我需要通过两个迭代器时,这最多是一个不便之处,并且最坏的情况是很大的不便,例如count(obj.getVecByVal()。begin(),obj.getVecByVal()。end(),5)显然失败(因为在单独的副本上迭代) - 所以需要一个命名的本地文件 – 2009-02-18 17:35:45

回答

14

有一个同伴书生效C++系列,这被称为“Effective STL”。学习使用标准C++库(neéSTL)的最佳实践是一个很好的起点。

1

你应该明白模板和其他多态性的概念,为了有效地使用STL。

1

要了解STL,您需要了解模板,并且您还应该擅长数据结构。

3

为什么不告诉我们那些批评,我们会回应?如果批评是有效的,我们会告诉你的。如果他们不是,我们会告诉你为什么不。

的STL有一个复杂的历史,最初是因为,1)很少有人了解它,和2)一些编译器正确实现它。但那是十年前的事了。今天?有用。它很有效率。它解决了很多问题。最大的问题是,它需要一些时间来围绕它的工作方式。

最简单的最佳实践是“只要它提供您需要的功能,就使用STL”。 除非我们知道它受到了哪些批评,否则很难提供更具体的建议。

但是一般情况下,批评它的人通常只是而不是C++程序员。已经学会使用类的C程序员属于这一类。

5

我能想到把我的头顶部,当SC + L不适合使用的,其中a正确执行不提供(也许你的工作有些晦涩一些罕见的情况下,唯一的情况下,平台,只有有限的C++编译器已经实现)或者需要极高的性能(可能用于下一代游戏的图形渲染系统的核心代码)。

如果您使用的是普通电脑,99%肯定您不属于第一种情况。至于第二种情况,如果您有良好的性能分析工具的确凿证据证明您的程序中的瓶颈是SC++ L,那么您绝对应该只考虑实现您自己的一组容器和算法。

有关SC++ L的最佳做法是尽可能简单地使用它。此外,几乎所有现代C++代码都大量使用Boost,您可以认为这是对SC++ L的优秀和大规模扩展。每当你发现自己想要做一个相当标准的算法任务时,你应该使用Google来查看SC++ L或Boost是否提供预制,测试和验证的工具来完成这项任务。

2

STL是由最好的大脑写的。在大多数情况下,你可能不会提出更好的实现。 它的性能很好,它没有bug,它是在方法,API,代码组件之间传递参数的好标准,并且不用说,它封装了所有丑陋的东西。 问题是,你必须知道如何为你的问题选择合适的容器。否则,您可能无法享受其好处。 网上有一些关于如何选择正确的STL容器的文章。 一个很好的链接是:STL Containers ,它有一个很好的如何挑选容器的流程图。