【问题标题】:C / C++ equivalents to the Python Standard LibraryPython 标准库的 C/C++ 等效项
【发布时间】:2011-05-26 19:19:46
【问题描述】:

我非常依赖Python's standard library,无论是对于有用的数据结构和操纵器(例如,collectionsitertools)还是对于实用程序(例如,optparsejsonlogging),跳过样板,然后把事情做好。翻阅 C++ 标准库的文档,它似乎完全是关于数据结构的,几乎没有 Python 标准库中的“电池”。

Boost 库是我所知道的唯一一个类似于 Python 标准库的开源 C++ 库集合,但是虽然它确实具有正则表达式支持等实用程序库,但其中大部分也专用于数据结构。我真的很惊讶,即使是像保证解析和编写 CSV 文件这样简单的事情,使用 Python csv module 变得非常简单,看起来也需要在 C++ 中滚动你自己(即使你利用 Boost 的一些解析库) .

还有其他提供“电池”的 C++ 开源库吗?如果没有,作为 C++ 程序员,你会怎么做:寻找单独的实用程序库(如果有,怎么做),或者只是自己开发(这看起来很烦人而且很浪费)?

【问题讨论】:

  • 如果你不介意一点点开销(而且你非常依赖 Python),你总是可以将 Python 解释器嵌入到你的 C 应用程序中:) docs.python.org/extending/embedding.html
  • @Demian 确实如此,但是如果没有直接的 C/C++ 等价于许多这些工具,我会完全感到困惑。如果 TIOBE、LangPop 和 Stack Overflow 标签的数量有任何迹象,C++ 的使用仍然比 Python 更广泛,更不用说比 Python 早了十年。
  • @gotgenes:“如果没有与这些工具中的许多直接等效的 C/C++,我会完全感到困惑”。不,你不会。您将运行 Python。完全不会有任何困惑。在 C 中嵌入 Python 意味着您仍在使用 Python。
  • @gotgenes:当有像 Python 这样的替代品可用时,仍然有很多人/公司使用 C++ 的原因是 95% 的遗留问题。人们一直使用 C++,因此他们将继续使用它。然而,明智的做法是承认每种语言的优点,并巧妙地组合使用(C/C++ 和 Python 可以很好地交互)。
  • @Space_C0wb0y:我明白你的意思。我之所以提出这个问题是因为我用 Python 编写了一个科学应用程序(使用 MCMC 方法)。尽管在 Python 中进行了分析和优化,但它太慢了。我的顾问说用 C++ 重写它。我很想用 C 或 C++ 加速 Python 程序,但我不明白如何去做。 (请参阅stackoverflow.com/questions/4189328/…)因此,我正在寻找与已知工具等效的 C++ 工具。

标签: c++ python standard-library c++-standard-library


【解决方案1】:
【解决方案2】:

http://www.boost.org/doc/libs/1_45_0/?view=categorized

Boost 不仅仅是数据结构 - 它有很多你想要的电池 - 解析、线程、集合、日志记录等。

【讨论】:

【解决方案3】:

虽然 C++ 确实提供了许多由 OO 扩展的便利,但它保留了一个非常简单的标准库。 C++ 有 STL 和 Boost。这些非常好,而且不仅仅是数据结构。

如果您的需求是用于原型设计或制作应用程序的这类高阶函数,而没有强烈(相对而言)速度要求,那么 C/C++ 可能不是您的正确选择。我相信您会发现,对于大多数项目而言,高级语言的速度足以满足您的需求。如果您正在开发一个需要 C/C++ 速度(以及伴随的标准偏差)的应用程序,那么您可能应该花时间仔细挑选您将使用的每个单独的库。

【讨论】:

  • C++ 没有“STL”。 STL,作为一个真正的第三方东西,非常、非常旧(比 C++98 标准化更早),并且几乎所有都可以在C++ 标准库(截至该标准化)。 C++ 提供的标准库比大多数人认为的要广泛得多。 (在 C++0x 标准库中也可以找到许多 Boost。)
【解决方案4】:

Poco library 更像其他语言的标准库。

实际上 Poco 网站的徽标上写着“C++ 现在随附电池!”,这似乎正是您所要求的。

当我尝试时我不喜欢它,因为我发现它太像 C 并且部分之间有太多依赖关系(很难挑出你想要的功能)。

但是有很多人和公司在使用它,所以看起来我是少数,你可能会发现它非常有用。

此外,正如其他人所提到的,对于数据结构、解析器以及 Python 的接口!等等,请查看 Boost

干杯,

【讨论】:

  • 谢谢,我没听说过 Poco。请问你最后改用的是什么?
【解决方案5】:

使用 C 和 C++,您通常不会找到“做所有事情”的库,而是使用做不同事情的各个库。您可以使用一个进行 JSON 解析的库、一个进行加密的库、一个进行日志记录的库,等等。

Boost 和 Qt 是唯一更像“全能”类型库的库。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-14
    相关资源
    最近更新 更多