【问题标题】:Learning the C++ Standard library - a good idea?学习 C++ 标准库 - 一个好主意?
【发布时间】:2010-03-07 14:17:56
【问题描述】:

我是 C++ 的初级程序员,我还在学习基础,但是我有一个关于 C++ 中的标准库和 STL 的简单问题,我认为这不是来自语言的核心,我的意思是这个库只是使编程和可移植性更容易,这意味着如果我学习并掌握了 C++ 规则,我可以构建自己的规则,我的意思是通过练习来获得这种调用体验。 示例:cout 是标准输出函数,但如果我想编写一个用于 Windows 的 GUI 软件,我永远不会只看它! 我的问题:这是真的吗?如果不是,为什么?

【问题讨论】:

    标签: c++


    【解决方案1】:

    如果不熟悉标准库,就不能说是真正的 C++ 程序员。自己写是一个非常糟糕的主意。我强烈建议您获取一份Nicolai Josuttis's book 的副本,并接受它会给您带来的力量。例如,您将了解到流不仅有利于在控制台应用程序中执行 I/O。

    也许您还应该看看Good Idea / Bad Idea Should I Reimplement Most Of C++?,它讨论了编写自己的标准库的利弊。

    【讨论】:

    • 我不经常使用流(在我工作的地方,人们对 C stdio 发誓;这不是我的决定),但容器是巨大的、非常节省时间的。虽然制作自己的链表模板并非不可能,但std::vectorstd::map 可以节省大量时间,因为您不必疯狂地管理内存,而且红黑树也不是微不足道的一部分代码,分别。 Josuttis 的书和 Strostrup 的 C++ 编程语言 是我们确保每个 C++ 程序员都有的书。
    • 补充一下@Mike 所说的,在大多数情况下,标准库中的容器将比您在应用程序截止日期内编写的任何内容都更快、更健壮。
    【解决方案2】:

    您是正确的,C++ 标准库不是“核心语言”的一部分,并且标准库为您提供的大部分功能都可以仅使用核心语言的特性来独立实现。

    但是,学习标准库对您大有裨益。为什么要浪费时间重写已经存在的功能?如果您仍然选择重写它们,那么您的版本可能会出现错误。这只是软件开发的真理之一,无论你多么优秀,但如果你是该语言的初学者,那就更是如此。相比之下,那里的实现是在现场经过试验和测试的。

    【讨论】:

      【解决方案3】:

      寻找 std::cout 对 GUI 编程没有用的示例并不完全正确。即使您不会使用 cout,也值得了解 std::basic_ostream 以获得简单的字符串格式化功能。

      【讨论】:

        【解决方案4】:

        您不会使用 STL 中的所有内容,但 MAN 是那些字符串和容器类,有时还有算法,很有用!

        【讨论】:

        • 一个小问题 - std::strings 从未被认为是所谓的 STL 的一部分。
        • @Neil:真的吗?我的意思是,我相信你和你交谈的其他人不认为它是一部分,但 std::basic_string 在 SGI 的 STL 中,它与其他模板容器一起记录,等等。我当然认为 std::string 是其中的一部分STL,只要存在任何诸如 STL 之类的东西。与 vector 一样,它是一种专业化,但与 vector 不同,它很有用;-)
        • @Steve 我从书架上摘下我的 Matt Austern 的“通用编程和 STL”(与您在 Stepanov 先生之外获得的 STL 知识来源一样好),我查看索引,我发现没有提到字符串。 QED。
        • 嗯。这是对标题中“和”的非常具体的解释。如果“字符串”是 STL 的一部分,但不是泛型编程的一部分,因为它是一个(typedef for a)类,而不是模板呢?那么它会在索引中提及吗?是基本字符串吗?索引中是否提到了vector<float>,如果没有,vector<float> 是否不是 STL 的一部分? std::iota 是否在索引中,如果不是,std::iota 是否不是 STL 的一部分? (顺便说一句,它是 STL 的一部分,而不是 C++ 标准的一部分)等等。我有点看到那个字符串是一个特例,但我不认为你的 Q 完全是 D ;-)
        • 再次,嗯。我已经解释了为什么我认为您的推理规则“如果 X 在一本关于 Y 的体面的书中没有索引条目,那么 X 不是 Y 的一部分”是不可靠的。但除非我真的很挑剔,说 STL 是由 SGI 创建的东西,并且当且仅当 SGI 说它是它的一部分时,我不能阻止你发明你自己的 STL 定义。而且我不会挑剔地说,因为 SGI 的产品不符合大多数人对 STL 的意思,尽管它是该术语的唯一正式定义。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-26
        • 2020-12-04
        • 1970-01-01
        • 2010-12-14
        • 2013-08-05
        • 2010-10-26
        相关资源
        最近更新 更多