【问题标题】:STL vs AlgorithmsSTL 与算法
【发布时间】:2020-08-09 22:49:15
【问题描述】:

我知道问这个问题很愚蠢。 我作为初学者提出问题,因为我正在学习 DsAlgo。

让我们举个简单的旋转排序数组的例子。

我可以采用两种方法。 1.STL 2.没有STL

我可以简单地使用std::rotate 来做到这一点,或者我可以使用杂耍算法。两种方法的 Big-O 复杂度都是 O(n)。

因此,如果我可以简单地将代码制作成两行代码,我为什么需要学习不同的算法?

我真的很困惑该走哪条路。

【问题讨论】:

  • 一旦你提到了STL,我强烈建议你去stepanovpapers.com阅读一些STL之父——Alexander Stepanov写的论文。

标签: c++ algorithm stl c++14


【解决方案1】:

如果标准库有可以完成工作的算法,你应该使用它们!以下是一些原因:

  1. 它就在那里,您不必重写它。
  2. 与您自己推出的产品相比,它经过了全面测试,出现问题的可能性要小得多。
  3. 它可能是由编写编译器的同一个人实现的,因此它可能已尽可能优化。他们还有更多时间来优化该代码。
  4. 对于以后必须阅读您的代码的任何人来说,它更加明确和易于理解。
  5. 当您切换到更新/更好的编译器时,您的代码可能会更快,而无需您进行任何工作。

【讨论】:

  • 写得很好@Ayxan
【解决方案2】:

当然,您可以使您的代码 2 衬里。应该是这样的。您应该使用标准库,因为它们是以最佳方式编写的,并考虑了很多因素。

现在的问题是,你为什么要学习算法:

库提供抽象实现。你不知道幕后发生了什么。

一些库是开源的,通过这些库,您可以学习如何编写由编写编译器的人开发的代码的最佳实践。

现在,如果您想实现任何需要对时间和空间复杂度进行特定限制的用例,您应该知道算法是什么、它是如何工作的以及是否适合该用例。

通过学习算法,您还可以为特定用例设计新算法,而这些算法在标准库中是找不到的。库只是为基本算法提供解决方案,而不是全部。

通过学习算法,您可以开发自己的库并将其公开,以便其他开发人员可以使用它来节省时间并构建健壮的代码。

【讨论】:

  • 一些库(以及一些 C 或 C++ 编译器)是开源的。通过努力,您可以了解它们的工作原理。
  • 酷@BasileStarynkevitch,进行更改
  • @BasileStarynkevitch,谢谢,这很重要。我请求,如果你还有更多,请改进我的答案。
  • @DeepakTatyajiAhire 那么在面试或竞争性编程中是否允许使用 STL? STL 一直是我的首要任务,今天我写了一个二分搜索算法,它与 STL 中的 binary_search 函数具有相同的结果和复杂性,所以我假设,最好尽可能使用 STL 对吧?会不会影响面试?
  • 使用 STL 总是好的。面试没有问题。但是,如果面试官问你关于工作的事情,你应该知道
猜你喜欢
  • 2013-09-14
  • 2021-03-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多