代码之家  ›  专栏  ›  技术社区  ›  ldog

C++只用于STL容器是坏的做法吗?

  •  4
  • ldog  · 技术社区  · 15 年前

    先介绍一下背景。。。

    我开始学习Java编程。我对Java很在行,而且我也学会了大量使用Java容器,因为它们可以在保证良好性能的同时降低簿记的复杂性。我间歇性使用C++,但我绝对没有用java做得好,而且觉得很麻烦。我不知道C++足够工作,而不必查找每一个函数,所以我很快就恢复到尽可能多地坚持java。

    然后我突然开始用汇编语言破解,因为我觉得我把太多的注意力放在了一种太高层次的语言上,我需要更多的经验来了解CPU如何与内存交互,以及1和0的实际情况。我不得不承认,这是迄今为止我在电脑方面最有教育意义和乐趣的经历之一。

    显然,由于种种原因,我不能每天使用汇编语言编写代码,它主要是为了娱乐消遣而保留的。在通过这个经历了解了更多的电脑之后,我意识到C++比java更接近“1和0”的水平,但我仍然觉得它非常令人迟钝,就像瑞士军刀,有太多的小发明,可以用优雅的方式完成任何一项任务。我决定试试纯香草C,很快就爱上了。它是一种介于简单性和足够“微观管理”之间的令人愉快的媒介,不会抽象出真正发生的事情。但是,我确实错过了Java的一个方面:容器。特别是,一个简单的容器(如stl向量)在大小上动态扩展是非常有用的,但是每次都要用C实现是非常痛苦的。因此,我的代码现在看起来几乎完全是C,容器中有C++,这是我从C++中使用的唯一特性。

    我想知道它在实践中是否考虑使用C++的一个特性,而忽略其余的C类型代码呢?

    4 回复  |  直到 15 年前
        1
  •  14
  •   bobbymcr    15 年前

    简短的回答是,“这不是使用C++最有效的方法。”

    没有人能阻止你用你想用的语言。但是,你可能会限制自己,而不是学习和利用实际C++特性。

    如果编写其他人必须阅读和维护的代码,他们可能会很感激使用“真实C++”而不是“C类”(用前一个评论者的话)。

        2
  •  6
  •   Ignacio Vazquez-Abrams    15 年前

        3
  •  4
  •   Potatoswatter    15 年前

    <iostream> 是个瓶颈,所以我用C重写了I/O。

    以及 vector ,我用 <algorithms> begin() end() ,这意味着不仅容器而且序列(和for循环)都是禁止的。然后模板帮助预处理器生成主内循环。

    解决问题最自然的方法可能是正确的。你不需要解决问题的方法。学习使用C++是很好的,但是面向对象适合于一些问题而不是其他问题。

    另一方面,使用 bsearch stdlib.h 在C++程序中是错误的。

        4
  •  4
  •   John Dibling    15 年前

    你应该用C++来让你感觉最有意义。

    推荐文章