有哪些 C++ 标准库使用最佳实践? [关闭]

Posted

技术标签:

【中文标题】有哪些 C++ 标准库使用最佳实践? [关闭]【英文标题】:What are some C++ Standard Library usage best practices? [closed] 【发布时间】:2009-02-18 17:02:02 【问题描述】:

我正在学习 C++,而我正在阅读的书(C++ 编程语言)说不要重新发明***,而是要依赖标准库。在 C 中,我经常最终创建一个链表,并且一遍又一遍地迭代链表(也许我做错了不确定),所以 C++ 中可用的容器、字符串和算法的想法真的很吸引我.但是我在网上看了一点,也听到了一些朋友和同事对 STL 的批评,所以我想我可能会在这里挑选一些大脑。

有哪些使用 STL 的最佳实践,您从 STL 中学到了哪些经验教训?

【问题讨论】:

我会对有关 STL 的投诉感兴趣,以便我们将其击落。 Martin,我的抱怨是易用性。当我需要通过两个迭代器时,这充其量是一种不便,最坏的情况是一种很大的不便,例如count(obj.getVecByVal().begin(), obj.getVecByVal().end(), 5) 非明显失败(由于在单独的副本上迭代)——所以需要一个命名的本地 Martin - 当他们再次出现时,我会发布一个新问题。主要是关于错误和缓慢。 【参考方案1】:

Effective C++ 系列有一本配套书,名为“Effective STL”。这是学习使用标准 C++ 库 (neé STL) 的最佳实践的良好起点。

【讨论】:

【参考方案2】:

您可能需要一份“有效的 C++:改进程序和设计的 50 种特定方法(第 2 版)”:

http://www.amazon.com/Effective-Specific-Addison-Wesley-Professional-Computing/dp/0201924889

我发现它非常宝贵,即使您不是使用 C++ 编程,它在今天仍然非常重要。

【讨论】:

也许同一作者的“有效 STL”更重要? 阅读他的所有 3 本 C++ 书籍绝对是最佳实践。 太棒了。我会看看这些书。 :) 你可能应该得到有效 C++ 的第三版... Effective C++ +1。这是关于 C++ IMO 的最重要的一本书。【参考方案3】:

如果您真的想学习 C++ 标准库(其中包括字符串之类的东西,传统上不被视为 STL 的一部分),您需要一本好书。这方面最好的是"The C++ Standard Library" by Nicolai Jossutis。

【讨论】:

【参考方案4】:

当 SC++L 不适合使用时,我能想到的唯一情况是一些罕见的情况,在这些情况下,要么没有提供正确的实现(也许你正在一些不知名的平台上工作只有有限的 C++ 编译器已实现)或需要极高的性能(也许对于存在于下一代游戏图形渲染系统核心的代码)。

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

关于 SC++L 的最佳实践是尽可能简单地使用它。此外,几乎所有现代 C++ 代码都大量使用Boost,您可以将其视为对 SC++L 的出色且大规模的扩展。每当您发现自己想要完成一项相当标准的算法任务时,您应该使用 Google 来查看 SC++L 或 Boost 是否提供了预制的、经过测试的、经过验证的工具来完成这项任务。

【讨论】:

【参考方案5】:

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

STL 的历史参差不齐,因为最初,1) 很少有人理解它,2) 很少有编译器能正确实现它。但那是十年前的事了。今天?有用。这是有效的。它解决了很多问题。它最大的问题是你需要一些时间来理解它是如何工作的。

最简单的最佳实践是“只要 STL 提供您需要的功能就使用它”。 而且很难提供更具体的建议,除非我们知道它所面临的批评。

但总的来说,批评它的人通常只是不是 C++ 程序员。已经学会使用类的 C 程序员属于这一类。

【讨论】:

【参考方案6】:

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

【讨论】:

【参考方案7】:

您应该了解模板的概念,以及其他多态性,以便有效地使用STL。

【讨论】:

【参考方案8】:

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

【讨论】:

以上是关于有哪些 C++ 标准库使用最佳实践? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

创建要在 C# 中编组的 C++ Dll 的最佳实践 [关闭]

C++ 智能指针最佳实践&源码分析

C++ 智能指针最佳实践&源码分析

C++ 智能指针最佳实践&源码分析

创建数据模型的最佳实践 [关闭]

最佳实践:软件版本控制 [关闭]