slot deposit pulsa slot mahjong slot gacor slot gacor slot gacor resmi slot gacor 2025 slot gacor terpercaya slot gacor 2025 slot gacor hari ini slot gacor hari ini slot gacor hari ini
2023 年特别有用的 8 个 C++ 库
17611538698
webmaster@21cto.com

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

编程语言 0 1549 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 包来尽我所能提供帮助。

评论