STL与算法

问题描述 投票:0回答:2

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

所以我们举个例子,简单的旋转一个排序数组。

有两种方法我可以遵循.1.STL2.不使用STL。

我可以简单地通过使用 std::rotate 或者我可以使用杂耍算法。这两种方法的大O复杂度都是O(n)。

那么如果我可以简单的把一个代码做成两行,为什么还要学习不同的算法呢?

我真的很困惑,我应该选择哪种方式。

c++ algorithm stl c++14
2个回答
6
投票

如果标准库有算法,可以完成你的工作。你应该使用它们! 这里有几个原因。

  1. 它是简单的存在,你不必重写它。
  2. 它经过彻底的测试,比你自己推出的东西更不可能出现错误。
  3. 它很可能是由编写编译器的人实现的,所以它可能是尽可能的优化。他们也有更多的时间来优化那段代码。
  4. 对于以后要读你的代码的人来说,这更明确,更容易理解。
  5. 当你换成一个更新更好的编译器时,你的代码有可能在你这边不做任何工作的情况下变得更快。

2
投票

当然你可以把你的代码做成2行。它应该是这样的。你应该使用 标准库 因为它们是在考虑到很多因素的情况下写出来的。

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

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

有些库是开源的,通过这些库,你可以学习如何编写代码的最佳实践,因为它们是由编写编译器的人开发的。

现在,如果你想实现任何对时间和空间复杂度有特殊限制的用例,你应该知道什么是算法,它是如何工作的,是否适合用例。

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

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

© www.soinside.com 2019 - 2024. All rights reserved.