Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/147.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ STL-vs算法_C++_Algorithm_Stl_C++14 - Fatal编程技术网

C++ STL-vs算法

C++ STL-vs算法,c++,algorithm,stl,c++14,C++,Algorithm,Stl,C++14,我知道问这个问题很愚蠢。 我是一个初学者,在学习DsAlgo时问这个问题 让我们举一个简单的旋转排序数组的例子 我可以遵循两种方法。 1.STL 2.无STL 我可以简单地使用std::rotate或者使用杂耍算法来实现这一点。两种方法的Big-O复杂性都是O(n) 所以,如果我可以简单地将一个代码变成两行程序,为什么我需要学习不同的算法呢 我真的很困惑我是否应该走哪条路。当然你可以让你的代码2线性化。应该是这样的。您应该使用标准库,因为它们是以尽可能最佳的方式编写的,并考虑了许多因素 现在的问

我知道问这个问题很愚蠢。 我是一个初学者,在学习DsAlgo时问这个问题

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

我可以遵循两种方法。 1.STL 2.无STL

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

所以,如果我可以简单地将一个代码变成两行程序,为什么我需要学习不同的算法呢


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

当然你可以让你的代码2线性化。应该是这样的。您应该使用标准库,因为它们是以尽可能最佳的方式编写的,并考虑了许多因素

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

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

有些库是开源的,通过这些库,您可以了解编写编译器的人员开发代码时如何编写代码的最佳实践

现在,如果您想要实现任何需要特定时间和空间复杂性约束的用例,您应该知道算法是什么,它是如何工作的,以及它是否适合该用例

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


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

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

  • 它就在那里,你不必重写它
  • 它经过了彻底的测试,与您自己推出的产品相比,不太可能出现问题
  • 它很可能是由编写编译器的人实现的,所以它可能是尽可能优化的。他们也有更多的时间来优化代码
  • 对于以后必须阅读您的代码的任何人来说,它更明确、更容易理解
  • 当您切换到一个更新/更好的编译器时,您的代码可能会更快,而无需进行任何工作

  • 很好地记下了“AxxANTAR库(和一些C或C++编译器)是开源的。通过努力,你可以理解它们是如何工作的changes@BasileStarynkevitch,谢谢,这是很重要的一点。我请求,如果您还有更多,请改进我的答案。@DeepakTatyajiAhire那么STL在面试或竞争性编程中是允许的吗?STL一直是我的首要任务,今天我写了一个二进制搜索算法,它的结果和复杂性与STL中的二进制搜索函数相同,所以我假设,只要可能,最好使用STL,对吗?这会影响面试吗?使用STL总是好的。面试没有问题。但是,如果面试官问你关于工作的事情,你应该知道,一旦你提到STL,我强烈建议你去看看STL的父亲亚历山大·斯捷潘诺夫写的一些论文。