C++ 在C语言中是否有一套用于动态字符串、列表和字典的标准库?

C++ 在C语言中是否有一套用于动态字符串、列表和字典的标准库?,c++,python,c,cython,C++,Python,C,Cython,我对进入C语言以接近金属性能感兴趣,但我想用Python风格编写,不想使用自己的动态字符串、列表和字典。Cython相当不错,但如果可能的话,想知道如何在straight C中使用动态变量 < C++ >当然有STL,它将给你字符串、向量和映射。当然,一种可能是用C++中的C类风格编程,只使用这些特性。如果您需要C语言中的动态变量,这是标准做法吗?非常好,并且被广泛使用: GLib提供了核心应用程序 图书馆和图书馆的构建块 用C编写的应用程序。它提供 GNOME中使用的核心对象系统, 主循环实现

我对进入C语言以接近金属性能感兴趣,但我想用Python风格编写,不想使用自己的动态字符串、列表和字典。Cython相当不错,但如果可能的话,想知道如何在straight C中使用动态变量

< C++ >当然有STL,它将给你字符串、向量和映射。当然,一种可能是用C++中的C类风格编程,只使用这些特性。如果您需要C语言中的动态变量,这是标准做法吗?

非常好,并且被广泛使用:

GLib提供了核心应用程序 图书馆和图书馆的构建块 用C编写的应用程序。它提供 GNOME中使用的核心对象系统, 主循环实现,以及 用于 字符串和公共数据结构

事实上,
glib
提供的不仅仅是字符串、列表和dict的adt,还有更多(更多…)。但您可以很容易地从使用这些部件开始,稍后再扩展



也就是说,不要认为拥有动态字符串、列表和字典会让你的代码变得像Python。在某些复杂程度以上的C++应用中,绝大多数都有这样的数据结构的实现,但是我对这种“Python风格”的应用程序并不熟悉。它有所有这些的标准和高度优化的版本。绝对没有理由或好处把自己限制在C


(ED:换句话说,是的,这是一个非常标准的做法。记住,在使用C++时,没有使用C++的任何特性,通过设计,您可以选择和选择。例如,我经常禁用异常,因为它会导致大量臃肿的可执行文件。在C中根本没有理由编写代码)。

我对进入C语言很感兴趣,但我想用Pythonic风格来写
。不要。这是C语言,不是python。他们大不相同。如果要编写python,请编写python。如果你想用C语言编写python,你只会得到可怕的代码。@Falmari:当然这是真的,但同时,将在一种语言中学到的技术应用到另一种语言中会有所帮助。当然,前提是它不会让你的代码看起来像垃圾,,,没有一个是完全重复的,但答案或多或少是相同的…如果你用C编写Python,你就不会“接近金属性能”。使用正确的习惯用法,而不是正确的语言,是使C语言快速和轻便的原因。@R:那根本不是真的;Python的GC、高级VM和动态类型化带来了严重的开销,这使得用Python和C编写的相同算法在C.glib中几乎绝对快得多;对于大多数典型的任务,C++标准库会导致更多的可读代码。坏的建议,我见过的最糟糕的代码是来自那些天生的人。使用C++设施、标准库、Boost等,不要从C和$$%Y库开始。@ Gn:Boost(或者至少是其中的一个)不是一个改进;在那里发现了最丑陋的C++模板滥用,与密码+++绑定在最坏的C++代码中。C++的代码基本上是两个世界(C和C++)中最差的。要么写实C代码,要么使用C++。就像自然语言一样,试图将一种编程语言的习惯用法翻译成另一种是行不通的;它通常会导致极为低效和丑陋的代码。@7vies:Python的一些半函数式构造很好,但是,例如,
map的几乎每一种情况(Python中的lambda…< /c>)在编写列表理解时更为清晰。C++函数式函数如 STD::BINDIN1/几乎立即变得难以遵循。许多Linux LIBS都是用C编写的,而且有人认为比C++更合适——没有理由吗?C使用了几十年的习惯,他们在我的习惯和历史中挖了沟渠。C是我的第一个严肃的语言,但是今天我使用它的唯一地方是1:当对一个现存的C项目贡献了2,如果一个平台根本没有C++支持(例如一些嵌入式系统)。格伦:对于你的第二点,GCC不能“编译”太坏了。我敢肯定你仍然可以从某处获得C++-to-C交叉编译器…@Karl:“某处”的问题是你很少能依赖它。