17611538698
webmaster@21cto.com

2023 年特别有用的 8 个 C++ 库

编程语言 0 1069 2024-01-03 02:56:35

我非常喜欢感谢C++的特点,它可以很快地做出来,并且速度相当快。
2024 年,如果有机会,我会用 C++ 继续编写代码。

尽管 C++ 通常被人们认为是一种古老的语言,但新的库和现有的库仍在积极更新。

在 2023 年帮助我编码的库中,我列出了“不是标准的,但在广泛领域非常有用”的库。
我们希望这对那些正在寻找新图书馆的人有所帮助。

Glaze - 读取和写入 JSON

項目价值
库类型标头
C++版本20
执照mit
星数量732
2023 年发布数量67次

这可能是我在 2023 年使用最多的库了。在 2022 年之前,我经常使用 simdjson,后来在新项目中使用 Glaze。我很愿意使用它开发,是因为项目的活跃度,并且他们对问题做出快速响应。

优点

  • 虽然它不使用SIMD,但其运行速度与simdjson和yyjson相同。
  • 不仅是结构体和类,STL容器也可以直接读写JSON。
  • 你可以通过对中间数据使用独特的二进制格式来进一步加快该过程。

不太好的地方

  • 当读取具有许多长字符串的 JSON 数据时,与使用 SIMD 的库相比,它处于劣势。
  • 不支持读取最后一个字段中的逗号或注释
  • 没有类似流的处理(我认为)

替代库

有一个名为Jsonifier 的库,它采用类似的方法,但使用 SIMD,而且速度更快。
如果你正在寻找纯粹的速度,那么很可能会使用它。

commata - CSV 读写

项目价值
库类型仅标头
C++版本17
执照mit
星数量5
2023 年发布数量8次

它对于读取仍然常用的 CSV 文件非常有效。

好点子

  • 一次处理一行而不是一次读取所有内容
  • 它还支持双引号内的换行符。
  • 它有许多定制点,可用于大多数应用程序。

不太好的地方

  • 我担心这库太小了
  • 如果它可以映射到像釉这样的结构,那就太好了。

替代库

我认为ssp也很有用,尽管方法很不同。

unordered_dense - std::unordered_map/set 的替代品

项目价值
库类型仅标头
C++版本17
执照
星星数量618
2023 年发布数量15回

这是一个替代 std::unorder_set 和 std::unorder_map 的库。
通过调整数据存储方式,它在大多数应用程序中可以以几乎相同的速度运行,并且在某些应用程序中速度明显更快。

好点子

  • 就我使用的而言,API 是相同的,因此,它还支持使用 Glaze 读取和写入 JSON。
  • std::unordered_ma/set 的稳定替代品

不太好的地方

  • 自从出现了更快的哈希函数之后,每次定义它们就变得更加麻烦。
  • 我经常想要一个保留顺序的 std::map/set 替代方案。

替代库

AbseilFolly等提供的容器也很强大。

Magic Enum C++ - 有用的枚举

项目价值
库类型仅标头
C++版本17
执照
星星数量4.1k
2023 年发布数量6回

它是一个实用程序库,使枚举和枚举类变得有用。
也许它已经足够重要了......

好点子

  • 您可以轻松地在枚举和字符串之间进行转换,也可以定义自己的字符串(例如日语)进行转换。
  • 有一个函数可以让您轻松地在枚举中表达标志。

不太好的地方

  • 包含路径在 0.9.4 中发生了变化,并且很难进行更改。

替代库

还有smart_enum和wise_enum,但是开发已经停止了。

Quill - 快速且多功能的日志输出

项目价值
库类型静态/动态库
C++版本17
执照
星星数量984
2023 年发布数量17回

最近,当涉及到日志输出时,我几乎只使用这个。
我很高兴开发相对活跃。

好点子

  • 当日志采用文本格式时,工作速度更快
  • 可以定义灵活的日志输出配置和日志轮转设置

不太好的地方

  • API 仍然不稳定,偶尔会有一些版本需要小的修改,这让我哭了。

替代库

在其他库中,我认为spdlog如果有更丰富的功能和稳定的API更好, fmtlog如果有更快的运行更好。

freexl - 读取 xls/xlsx 文件

项目价值
库类型静态/动态库
C++版本C言語
执照GPL-2.0、LGPL-2.1、MPL-1.0
星星数量没有 github 存储库
2023 年发布数量1回

这是一个可以读取仍然存在的 xls 文件的库。
随着2023/07的发布,读取xlsx文件已经成为可能,可以用于一般阅读。
谢谢。

好点子

  • xls、xlsx、ods文件可一库读取

不太好的地方

  • 加载xlsx需要调用另一个函数
  • xls 可能无法正确加载
  • 不支持加载图形或物体

替代库

我不知道有任何维护的库支持读取 xls 文件。

libxlsxwriter - 写入 xlsx 文件

項目价值
库类型静态/动态库
C++版本C言語
执照BSD-2 条款
星星数量1.3k
2023 年发布数量0回

用于写入xlsx文件的库,与freexl相反。
虽然它不是很活跃,但维护得很好,虽然它有一些怪癖,但它提供了 C 语言库中独一无二的功能。

好点子

  • 公式、单元格合并、自动筛选等大部分功能都可以实现。
  • 可以写图像和图表
  • 具有写入大文件的能力

不太好的地方

  • 它不支持最近的功能,例如形状和迷你图(我羡慕golang的excelize )
  • 单元格必须同时设置其值和格式。

替代库

我还没有找到任何其他可以绘制图表的 C/C++ 库。

Blend2d - 快速矢量图像绘制

项目价值
库类型静态/动态库
C++版本11
执照兹利布
星星数量1.4k
2023 年发布数量9回

高速运行的 2D 矢量图形库。
它对于创建简单的图表、在地图图块上绘制分析结果以及可视化小数据非常有用。

好点子

  • 可以快速生成漂亮的图像
  • 不依赖FreeType的灵活字体绘制

不太好的地方

  • 无法绘制虚线(目前)
  • 发布很难理解

替代库

我认为这适用于nanovg 。

在最后

C++ 往往以 Rust 和 Go 为主,但新的库仍在开发中,我注意到现有库的可用性随着对 C++17/20/23 的支持而得到了提高。
我只能希望它能在2024年继续稳步发展。

我正在考虑创建一个 conan 包来尽我所能提供帮助。

评论