我正在学习C ++,而我正在阅读的书(C ++编程语言)说要重新发明轮子,依靠标准库。在C中,我经常最终创建一个链表,并反复链接列表迭代(也许我做错了不确定),所以C ++中可用的容器,字符串和算法的想法真的很吸引我。不过我在网上看过一些,并听到了我的朋友和同事对STL的批评,所以我想我也许会选择一些大脑。
使用STL有哪些最佳实践,以及您从STL学到的经验教训?
答案 0 :(得分:14)
有效的C ++系列有一本书,名为“Effective STL”。这是使用标准C ++库(neéSTL)了解最佳实践的良好起点。
答案 1 :(得分:10)
您可能想要获取“有效的C ++:50种改进程序和设计的特定方法(第2版)”的副本:
http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889
我发现它非常宝贵,即使你不是用C ++编程,它今天仍然非常重要。
答案 2 :(得分:7)
如果你真的想学习C ++标准库(其中包括字符串之类的东西,传统上这些字符串并不被视为STL的一部分),你需要一本好书。这个领域最好的是"The C++ Standard Library" by Nicolai Jossutis。
答案 3 :(得分:5)
当SC ++ L不适合使用时,我能想到的唯一一个例子是在一些罕见的情况下,没有提供正确的实现(也许你正在处理一些模糊的平台只有有限的C ++编译器才能实现)或者需要极高的性能(可能是代码存在于下一代游戏的图形渲染系统的核心)。
如果您使用的是普通电脑,99%肯定您不是第一种情况。至于第二种情况,如果您从良好的性能分析工具中获得确定的证据表明程序中的瓶颈是SC ++ L,那么出于性能原因,您绝对应该考虑实现自己的一组容器和算法。
关于SC ++ L的最佳实践是尽可能简单地使用它。此外,几乎所有现代C ++代码都大量使用Boost,您可以将其视为SC ++ L的优秀和大规模扩展。每当您发现自己想要执行相当标准的算法任务时,您应该使用Google来查看SC ++ L或Boost是否提供预先制作,经过测试和验证的设施来完成此任务。
答案 4 :(得分:3)
你为什么不告诉我们这些批评,我们会回应?如果批评是有效的,我们会告诉你。如果他们不是,我们会告诉你为什么不。
STL有一个混合的历史,因为最初,1)很少有人理解它,2)很少有编译器正确实现它。但那是十年前的事了。今天?有用。这很有效率。它解决了很多问题。最大的问题是它需要一些时间来解决它的工作原理。
最简单的最佳做法是“只要提供您需要的功能,就使用STL”。 除非我们知道它的批评是什么,否则很难提供更具体的建议。
但总的来说,批评它的人通常只是而不是C ++程序员。已经学会使用类的C程序员属于这一类。
答案 5 :(得分:2)
STL是由最好的大脑写的。在大多数情况下,您可能无法提供更好的实现。 它的性能很好,它没有错误,它是在方法,API,代码组件之间传递参数的一个很好的标准,不用说,它封装了所有丑陋的东西。 问题是,您必须知道如何为您的问题选择合适的容器。否则,您可能不会享受它的好处。 网上有一些关于如何选择合适的STL容器的文章。 一个很好的链接是:STL Containers ,它有一个很好的流程图,说明如何挑选你的容器。
答案 6 :(得分:1)
您应该了解模板和其他多态的概念,以便有效地使用STL。
答案 7 :(得分:1)
要了解STL,您需要了解模板,而且您应该擅长数据结构。