程序员应该使用STL还是编写自己的代码?

我不太了解C ++数据结构,但是我想知道你(程序员)使用STL还是编写你自己的代码? 毕竟STL是专门用来做search,replace等等任务的。

有人真的不需要学习很多关于链表,二进制search和更多,因为我可以使用STL。 你会build议什么?

你应该使用STL,因为它经过了很好的testing和优化。

这并不意味着你不应该知道如何自己写这些数据结构。 有了这种能力,您将能够为您的应用程序select最好的STL数据结构。

虽然标准模板库在执行任务时非常方便,就像您像使用链接列表进行search,replace一样,但它不应取代库内部正在进行的操作。

您提到不需要了解链接列表,二进制search和“更多”,但是至less应该了解这些数据结构和过程如何工作,因为它会使用它们(以及何时使用它们)更加有效。

基本上 – 你不必重新发明轮子,但至less知道是什么让轮子有效地转动。

一般情况下,可以使用STL和标准库。 首先它可能比你自己的代码更好地testing,其次它有助于保持代码的可移植性。 唯一一次你应该重写这个function是为了学习的目的。 编写自己的联想地图或链接列表可能是教育性的,但是对于生产代码,坚持经过良好testing并符合标准的代码。

对STL提供的工具的底层数据结构,方法和应用的工作知识将使你成为一个更好的程序员。 知道什么时候使用什么容器types,或者哪个algorithm和正确的实现一样重要。 有时,理解一些更复杂的概念的最简单的方法是在数据结构和algorithm类的上下文中自己实现它们。

也就是说,STL中的代码是由专家编写的,并随着时间的推移而变成一个标准库,这个库被全世界数百万人使用。 实际上,除了性能(或大小)重要的极端情况下,几乎没有任何理由“推出自己的产品”。

只是添加我的答案(从上面的评论):

是的,你应该考虑使用你自己的代码来实现一个序列,一个链表。

这是他们在Comp Sci课程上教的内容,并不是没有理由的。 但是,如果你正在寻找快速工作,那么只需使用STL。

我只是认为人们应该了解这些工具是如何工作的。

一般来说,您应该使用STL或Boost容器,因为它们的有效性和可靠性。 你仍然需要在现有容器上有相应的世界观。 你应该知道它的优点和优点。 研究容器的内部结构和工作原理可以让你更好的理解。

我不愿写,因为我5年没有写C ++了。 但是有一些事情还没有被讨论过。

如果这个实现不适合你所需要的,那么如果你可以比使用库更容易编写和testing你自己的东西,那就不要使用它。 我最近在Java中遇到了这个问题,在那里我需要一个快速的比特币。 详细信息::在JVM中有两个相关的类(BitSet和BigInteger)。 BitSet不支持初始化,而不是一次设置一位 ; BigInteger有一个无关的标记,混淆了事物,是不可改变的,这对我来说是代价高昂的。 几个小时后,我终于用自己的testing写下了自己的testing。 它更好,更快,我可以做任何我想做的事情。

另一个自己写的理由是,如果你不了解相对于你的需求的库实现的规范,不能轻易地testing它,或者阅读它来找出它的作用,并且可以很容易地推出你自己的。 这是STL实现中的一个特殊问题,它们(或者至less曾经被用于)带有简洁,不充分,神秘的文档和无意义,不透明的源代码,像一个巨大的stream氓浪潮一样翻滚你的脑海。

我使用C / C ++标准库和STL,因为它是一个非常大的节省时间,我不认为有必要重新发明轮子。 我也可以使用提升。

编写自己的容器类和algorithm仍然是一个很好的学习练习。

使用STL,除非你有一个令人信服的理由,例如速度或正确性,而不是。 肯定知道如何自己写基本的数据结构。

STL经过了充分的testing和可靠的testing,但并不是最快的解决scheme。 一些容器分配了很多小内存块,而不是一个大块。 如果你真的有速度问题,那么你可以考虑制作你自己的固定大小的列表。 但是对于很多目的来说,STL是标准的解决scheme。

很聪明的人写了STL。 然后更聪明的人使用它,对它进行testing并对其进行改进。 你以为你会做得更好? 很less。 这是一个伟大的工具; 你应该尽可能使用它!

在学习/玩游戏时自己写低等级的东西,但是在工作中使用由专家编写和提炼的代码已经有数年了,并且已经有数千名工程师在数千种不同的条件下进行testing。

换句话说, 只有在您的代码可以击败其他代码的情况下才使用您的代码