对于C ++开发人员来说,STL知识的哪一部分是必须的?

时间:2011-06-11 12:06:44

标签: stl

我对C ++有很好的了解,但从未深入研究过STL。 STL的哪一部分我必须学习如何提高工作效率并减少工作中的缺陷?

感谢。

5 个答案:

答案 0 :(得分:10)

  

我对C ++有很好的了解

得到应有的尊重,但不是 - 你没有。标准库,或者至少它的大部分(特别是称为“STL”的子集)是C ++的基本部分。如果不了解它,你根本不了解C ++。

事实上,C ++的大部分现代设计(基本上是自98版以来的所有内容)都受到源于标准库的设计考虑因素的影响,此后语言中的大部分更改都是更改标准库。如果你看一下官方的C ++语言描述,那么文档的一个很好的部分就是关注库。

答案 1 :(得分:3)

通常第一反应(至少在我看来,当然)对谁没有用STL工作过的人之前是底价拿到所有的模板代码。所以我首先要研究一下这个主题。

如果您已经了解模板基础知识,我建议您简要介绍一下STL设计文档。对于尚未熟悉它的人来说,这实际上是第二阶段的麻烦。这样做的原因是,STL是不是一个典型的面向对象范例下设计的,但根据generic programming范例

考虑到这一点,这可能是一个良好的开端introductory article。这里解释了STL组件中使用的术语。请注意,是比较老的文本集中在SGI实现(早于C ++标准,并错误地提到,例如,哈希基于容器作为其一部分)。但是,该理论仍然有效。

好吧,如果你已经知道我到目前为止所说的大部分内容,只需直接跳到其他人提供的topcis。

答案 2 :(得分:1)

您提到提高生产力和减少缺陷。您可以使用一般指导原则。我假设是c ++ 11,我提到的不仅仅是stl(智能指针):

  1. 使用容器,他们将为您管理记忆。例如,你为C数组摆脱new,后来不得不delete。 对于动态数组,请使用std::vector。您还在std::unordered_map中使用哈希表,在std::map中使用平衡树。有更多容器,请查看here
  2. 尽可能使用std::array而不是普通的C数组:当它们作为参数传递给函数时,它们永远不会衰减到指针,这可以避免非常恶心的错误。
  3. 使用智能指针,并在代码中永久忘记裸new及其匹配的delete。 这可以比你预期的更多地减少错误,特别是在存在例外的情况下。
  4. 尽可能使用std::make_shared。您可以使用它直接将shared_ptr作为参数分配给采用std::shared_ptr的函数。赤身裸体new这是不可能的。
  5. 使用算法而不是手动编码循环。代码将更具可读性,通常性能更高。
  6. 有了这个建议,您的代码应该更接近(但不一定等于或语义上等同于)C#或Java,其中手动内存管理消失。在许多情况下,这甚至比垃圾收集更好,因为您可以确定何时释放资源。

答案 3 :(得分:0)

我会说<algorithm>中的算法会真正清理你的代码,同时让你的代码更简洁。

显然,所有容器的知识将帮助您优化代码的瓶颈,这是由于某个选择的容器不是最佳的(但一定要先分析)。

这几乎是基础知识,它们将帮助您制作更强大的代码。

之后,您可以深入研究像std::shared_ptr这样的智能指针,它们几乎总是比常规指针更好(至少在我的情况下)。

答案 4 :(得分:0)

我认为可以从containersvectorlist)和alghorithmsbinary searchsort)开始。
正如杰西·埃蒙德写的那样,你知道的越多,你的生活就越好)))