我非常喜欢感谢C++的特点,它可以很快地做出来,并且速度相当快。2024 年,如果有机会,我会用 C++ 继续编写代码。
尽管 C++ 通常被人们认为是一种古老的语言,但新的库和现有的库仍在积极更新。
在 2023 年帮助我编码的库中,我列出了“不是标准的,但在广泛领域非常有用”的库。我们希望这对那些正在寻找新图书馆的人有所帮助。
Glaze - 读取和写入 JSON
項目 | 价值 |
---|---|
库类型 | 标头 |
C++版本 | 20 |
执照 | mit |
星数量 | 732 |
2023 年发布数量 | 67次 |
这可能是我在 2023 年使用最多的库了。在 2022 年之前,我经常使用 simdjson,后来在新项目中使用 Glaze。我很愿意使用它开发,是因为项目的活跃度,并且他们对问题做出快速响应。
优点
- 虽然它不使用SIMD,但其运行速度与simdjson和yyjson相同。
- 不仅是结构体和类,STL容器也可以直接读写JSON。
- 你可以通过对中间数据使用独特的二进制格式来进一步加快该过程。
不太好的地方
- 当读取具有许多长字符串的 JSON 数据时,与使用 SIMD 的库相比,它处于劣势。
- 不支持读取最后一个字段中的逗号或注释
- 没有类似流的处理(我认为)
替代库
- 当读取具有许多长字符串的 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 替代方案。
替代库
- 自从出现了更快的哈希函数之后,每次定义它们就变得更加麻烦。
- 我经常想要一个保留顺序的 std::map/set 替代方案。
替代库
Abseil、Folly等提供的容器也很强大。
Magic Enum C++ - 有用的枚举
项目 | 价值 |
---|---|
库类型 | 仅标头 |
C++版本 | 17 |
执照 | 和 |
星星数量 | 4.1k |
2023 年发布数量 | 6回 |
它是一个实用程序库,使枚举和枚举类变得有用。也许它已经足够重要了......
好点子
- 您可以轻松地在枚举和字符串之间进行转换,也可以定义自己的字符串(例如日语)进行转换。
- 有一个函数可以让您轻松地在枚举中表达标志。
不太好的地方
- 包含路径在 0.9.4 中发生了变化,并且很难进行更改。
替代库
- 包含路径在 0.9.4 中发生了变化,并且很难进行更改。
替代库
还有smart_enum和wise_enum,但是开发已经停止了。
Quill - 快速且多功能的日志输出
项目 | 价值 |
---|---|
库类型 | 静态/动态库 |
C++版本 | 17 |
执照 | 和 |
星星数量 | 984 |
2023 年发布数量 | 17回 |
最近,当涉及到日志输出时,我几乎只使用这个。我很高兴开发相对活跃。
好点子
- 当日志采用文本格式时,工作速度更快
- 可以定义灵活的日志输出配置和日志轮转设置
不太好的地方
- API 仍然不稳定,偶尔会有一些版本需要小的修改,这让我哭了。
替代库
- 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 可能无法正确加载
- 不支持加载图形或物体
替代库
- 加载xlsx需要调用另一个函数
- xls 可能无法正确加载
- 不支持加载图形或物体
替代库
我不知道有任何维护的库支持读取 xls 文件。
libxlsxwriter - 写入 xlsx 文件
項目 | 价值 |
---|---|
库类型 | 静态/动态库 |
C++版本 | C言語 |
执照 | BSD-2 条款 |
星星数量 | 1.3k |
2023 年发布数量 | 0回 |
用于写入xlsx文件的库,与freexl相反。虽然它不是很活跃,但维护得很好,虽然它有一些怪癖,但它提供了 C 语言库中独一无二的功能。
好点子
- 公式、单元格合并、自动筛选等大部分功能都可以实现。
- 可以写图像和图表
- 具有写入大文件的能力
不太好的地方
- 它不支持最近的功能,例如形状和迷你图(我羡慕golang的excelize )
- 单元格必须同时设置其值和格式。
替代库
- 它不支持最近的功能,例如形状和迷你图(我羡慕golang的excelize )
- 单元格必须同时设置其值和格式。
替代库
我还没有找到任何其他可以绘制图表的 C/C++ 库。
Blend2d - 快速矢量图像绘制
项目 | 价值 |
---|---|
库类型 | 静态/动态库 |
C++版本 | 11 |
执照 | 兹利布 |
星星数量 | 1.4k |
2023 年发布数量 | 9回 |
高速运行的 2D 矢量图形库。它对于创建简单的图表、在地图图块上绘制分析结果以及可视化小数据非常有用。
好点子
- 可以快速生成漂亮的图像
- 不依赖FreeType的灵活字体绘制
不太好的地方
- 无法绘制虚线(目前)
- 发布很难理解
替代库
- 无法绘制虚线(目前)
- 发布很难理解
替代库
我认为这适用于nanovg 。
在最后
C++ 往往以 Rust 和 Go 为主,但新的库仍在开发中,我注意到现有库的可用性随着对 C++17/20/23 的支持而得到了提高。我只能希望它能在2024年继续稳步发展。
我正在考虑创建一个 conan 包来尽我所能提供帮助。