C++ STL-vs算法
我知道问这个问题很愚蠢。 我是一个初学者,在学习DsAlgo时问这个问题 让我们举一个简单的旋转排序数组的例子 我可以遵循两种方法。 1.STL 2.无STL 我可以简单地使用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线性化。应该是这样的。您应该使用标准库,因为它们是以尽可能最佳的方式编写的,并考虑了许多因素 现在的问
std::rotate
或者使用杂耍算法来实现这一点。两种方法的Big-O复杂性都是O(n)
所以,如果我可以简单地将一个代码变成两行程序,为什么我需要学习不同的算法呢
我真的很困惑我是否应该走哪条路。当然你可以让你的代码2线性化。应该是这样的。您应该使用标准库,因为它们是以尽可能最佳的方式编写的,并考虑了许多因素 现在的问题是,为什么要学习算法: 库提供抽象实现。你不知道幕后发生了什么 有些库是开源的,通过这些库,您可以了解编写编译器的人员开发代码时如何编写代码的最佳实践 现在,如果您想要实现任何需要特定时间和空间复杂性约束的用例,您应该知道算法是什么,它是如何工作的,以及它是否适合该用例 通过学习算法,您还可以为标准库中找不到的特定用例设计新算法。库只提供基本算法的解决方案,而不是一切
通过学习算法,您可以开发自己的库并将其公开,以便其他开发人员可以使用它来节省时间并构建健壮的代码。如果标准库中的算法可以完成您的工作,您应该使用它们以下是一些原因:
很好地记下了“AxxANTAR库(和一些C或C++编译器)是开源的。通过努力,你可以理解它们是如何工作的changes@BasileStarynkevitch,谢谢,这是很重要的一点。我请求,如果您还有更多,请改进我的答案。@DeepakTatyajiAhire那么STL在面试或竞争性编程中是允许的吗?STL一直是我的首要任务,今天我写了一个二进制搜索算法,它的结果和复杂性与STL中的二进制搜索函数相同,所以我假设,只要可能,最好使用STL,对吗?这会影响面试吗?使用STL总是好的。面试没有问题。但是,如果面试官问你关于工作的事情,你应该知道,一旦你提到STL,我强烈建议你去看看STL的父亲亚历山大·斯捷潘诺夫写的一些论文。