README.md
以下内容由 AI 翻译,如有问题请点此提交 issue 反馈
Awesome header-only C++ libraries
目录
- 参数解析器
- 音频
- 基准测试
- 通信
- 压缩
- 并发
- 密码学与安全
- 数据库
- 数据格式
- 数据挖掘、机器学习与深度学习
- 数据格式化与展示
- 数据查询
- 数据结构与算法
- 调试
- 深度学习
- 依赖注入
- 事件处理机制
- 文件系统
- 函数式编程
- 几何、图形处理与游戏开发
- GPU
- 图
- GUI
- 高性能计算
- HTTP 与 Web
- 图像处理
- 语言绑定
- 语言开发
- 日志记录
- 数学
- 内存管理
- 模拟
- 网络
- 优化
- 解析
- 解析表达式文法
- 可移植性定义
- 反射
- 正则表达式
- 机器人学
- 序列化
- SIMD
- 标准/支持库
- 状态机
- 统计学
- 字符串工具
- 模板引擎
- 终端工具
- 测试框架
- Unicode
- 单位
- 验证
- Web 框架
参数解析器
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| Argh! | Argh! 一个极简的参数处理器。 | ||
| argparse | 现代 C++ 的参数解析器。 | ||
| args | 一个简单的仅头文件 C++ 参数解析库。 | ||
| cmd_line_parser | C++17 的命令行解析器。 | ||
| CLI11 | CLI11 是一个适用于 C++11 及更高版本的命令行解析器。 | ||
| clipp | 用于现代 C++ 的强大且富有表现力的参数解析。 | ||
| cxxopts | 轻量级 C++ GNU 风格选项解析库。 | ||
| fire-hpp | 使用函数签名创建完全功能性的 CLI。 | ||
| flags | 简单、可扩展、仅头文件的 C++17 参数解析器。 | ||
| structopt | 通过定义结构体来解析命令行参数。 |
音频
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| miniaudio | 用 C 编写的音频播放和捕获库,位于单个源文件中。 | ||
| minimp3 | 极简的 MP3 解码器单头文件库。 |
基准测试
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| criterion | 现代 C++ 的微基准测试。 | ||
| nanobench | [ | 简单、快速、精确的 C++11 微基准测试。 | |
| picobench | 一个用于 C++11 的小型微基准测试库。 |
通信
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| comms | 在 >=C++11 中实现二进制通信协议。 |
压缩
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| Gzip | Gzip 头文件 C++ 库。 | ||
| interpolative_coding | 二进制插值编码算法。 | ||
| zstr | 一个 C++ 头文件 ZLib 封装。 |
并发
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| cs_libguarded | 多线程编程。 | ||
| taskflow | 现代 C++ 并行任务编程。 | ||
| task_system | 更好的代码:并发 - Sean Parent。 | ||
| transwarp | 一个用于任务并发的 C++ 头文件库。 | ||
| taskpool | 现代 C++ 任务池。 | ||
| thread-pool | 现代 C++20 线程池。 |
加密与安全
| Library | Stars | Description | License |
|---|---|---|---|
| cppcodec | 编码/解码 base64、base64url、base32 等。 | ||
| digestpp | C++11 仅头文件的消息摘要库。 | ||
| PicoSHA2 | 仅头文件的 C++ SHA256 哈希生成器。 | ||
| plusaes | 仅头文件的 C++ AES 加密库。 | ||
| stduuid | 一个 C++17 跨平台 UUID 实现。 |
Databases
| Library | Stars | Description | License |
|---|---|---|---|
| OTL | Oracle、ODBC 和 DB2-CLI 模板库。 | OpenBSD |
Data Formats
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| bencode | C++20 bencode 库。 | ||
| Boost.JSON | JSON 解析、序列化、检查和修改。 | ||
| cpptoml | 用于解析 TOML 的仅头文件库。 | ||
| csv2 | 面向现代 C++ 的快速 CSV 解析器和写入器。 | ||
| CSV Parser | 读取、写入和分析 CSV 文件。 | ||
| daw_json_link | C++ 中的静态 JSON 解析。 | ||
| Fast C++ CSV Parser | 用于读取 CSV 文件的快速库。 | ||
| FlatJSON | 极快的单次分配和零拷贝 JSON 解析器。 | ||
| Glaze | 面向现代 C++ 的极快、内存中的 JSON 和接口库。 | ||
| inih | 这是 inih 的仅头文件 C++ 版本。 | ||
| nlohmann/json | 现代 C++ 的 JSON。 | ||
| json_struct | 高性能,仅单个头文件,用于将 JSON 序列化和反序列化为 C++ 结构体。 | ||
| jsoncons | 构建 JSON 和类 JSON 数据格式。 | ||
| minicsv | 基于 C++ 文件流的极简 CSV 流。 | ||
| picojson | C++ 中的仅头文件 JSON 解析器序列化器。 | ||
| pugixml | 具有类似 DOM 接口和 XPath 1.0 支持的 C++ XML 处理库。 | ||
| rapidcsv | C++ CSV 解析库。 | ||
| rapidjson | 用于 C++ 的快速 JSON 解析器/生成器。 | ||
| rapidxml | RapidXML 分支;支持 XML 命名空间、逐元素解析等。 | ||
| simdjson | 每秒解析数 GB 的 JSON。 | ||
| simpleini | 读取和写入 INI 风格的配置文件。 | ||
| taocpp JSON | C++ 仅头文件 JSON 库。 | ||
| toml11 | 现代 C++ 的 TOML 库。 | ||
| tomlplusplus | 适用于 >=C++17 的 TOML 配置文件解析器和序列化器。 | ||
| tortellini | 一个非常简单的 C++11 INI 文件格式。 | ||
| valijson | JSON Schema 验证。 | ||
| xml2json | 一个将 XML 转换为 JSON 的仅头文件 C++ 库。 |
数据挖掘、机器学习与深度学习
| 库 | Stars | 描述 | 许可证 |
|---|---|---|---|
| dlib | 用于现实世界机器学习和数据分析的工具包。 | ||
| frugally deep | [ | 在 C++ 中使用 Keras 模型。 | |
| gaenari | C++17 中的增量决策树。 | ||
| hnswlib | 快速近似最近邻。 | ||
| MiniDNN | 用于深度神经网络的仅头文件 C++ 库。 | ||
| mlpack | mlpack:一个快速、仅头文件的 C++ 机器学习库。 | ||
| nanoflann | 使用 KD 树的最近邻 (NN) 搜索。 | ||
| tiny-dnn | C++14 中无依赖的深度学习框架。 |
数据格式化与展示
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| asap | 创建、显示、迭代和操作日期。 | ||
| cxx prettyprint | C++(0x) 中任意容器的格式化打印。 | ||
| emio | 一个安全且快速的高层和底层字符输入/输出 C++20 库。 | ||
| fmt | 一个现代格式化库。 | ||
| pprint | 现代 C++ 的格式化打印器。 | ||
| strf | 一个用于 C++14 的快速格式化库。 | ||
| tabulate | 现代 C++ 的表格生成器。 |
数据查询
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| boolinq | 最简单的 C++ 仅头文件 LINQ 模板库。 |
数据结构与算法
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| BitMagic | 压缩位向量、逻辑运算、内存紧凑容器。 | ||
| concurrent queue | 快速多生产者、多消费者无锁并发队列。 | ||
| dynamic bitset | C++17 仅头文件动态位集。 | ||
| frozen | C++14 用户的 gperf 的 Constexpr 替代方案。 | ||
| hopscotch map | 使用 hopscotch 哈希的快速哈希映射和哈希集合。 | ||
| immer | 后现代不可变和持久化数据结构。 | ||
| MPMCQueue | 有界多生产者多消费者并发队列。 | ||
| outcome | 轻量级 outcome | ||
| parallel hashmap | 非常快速且内存友好的哈希映射和 btree 容器。 | ||
| PGM-index | 使用比其他容器少几个数量级的内存,对数十亿项进行极速查询和更新。 | ||
| robin-hood hashing | 基于 robin hood 哈希的快速且内存高效的哈希表。 | ||
| robin-map | 使用 Robin Hood 哈希的快速哈希映射和哈希集合。 | ||
| sfl-library | 小型向量。小型扁平 map/multimap/set/multiset(有序和无序)。C++11。 | ||
| small | 针对容器较小时进行优化的主要 STL 容器实现。 | ||
| tries | 快速且高度可定制的 C++20 前缀树(trie)实现。 |
调试
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| backward-cpp | C++ 的美观堆栈跟踪格式化打印器。 |
深度学习
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| ceras | 基于 C++20 的深度学习引擎。 |
依赖注入
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| inversify-cpp | C++17 控制反转和依赖注入容器库。 |
事件处理机制
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| eventbus | C++ 的中介者模式事件总线。 | ||
| eventpp | C++ 的事件分发器和回调列表。 | ||
| periodic-function | 在指定时间间隔执行回调。 |
文件系统
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| simplebinstream | C++ 简易二进制流。 | ||
| filesystem | 适用于 C++11/14/17 的 std::filesystem 跨平台实现。 | ||
| glob | C++17 的 Glob。 | ||
| llfio | P1031 低级文件 I/O 和文件系统库。 | ||
| mio | 跨平台 C++11 内存映射文件 I/O。 | ||
| mm_file | C++ 的内存映射文件。 | ||
| tinydir | 轻量级、可移植的 C 目录和文件读取器。 |
函数式编程
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| FunctionalPlus | C++ 函数式编程库。 | ||
| immer | C++ 中的持久化函数式数据结构。 | ||
| lager | C++ 中类似 Redux 的单向数据流。 | ||
| schmutz | 简易的 Guile Scheme C++ 绑定。 | ||
| zug | C++ 中的 Transducers(源自 Clojure)。 |
几何、图形处理和游戏开发
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| arcball_camera | 用于图形演示的即时模式相机。 | ||
| Brutus | 行进立方体算法实现。 | ||
| cinolib | 处理多边形和多面体网格。 | ||
| cr | 一个简单的 C 语言热重载仅头文件库。 | ||
| CxxSwizzle | 现代 C++ 通道混合(swizzling)仅头文件库。 | ||
| earcut.hpp | 快速多边形三角剖分。 | ||
| entt | 实体组件系统(ECS)及更多功能。 | ||
| glm | OpenGL 数学库(GLM)。 | ||
| librg | 🚀 自 2017 年以来简化多人游戏开发。 | ||
| micro-gl | 👾 CPU 矢量图形引擎(无需 FPU 或标准库)。 | ||
| nanort | 现代光线追踪内核。 | ||
| px | 线程调度、渲染等。 | ||
| Simple OpenGL Loader | 可扩展的跨平台 OpenGL 加载器。 | ||
| Sokol | 用于 C 和 C++ 的跨平台库。 | ||
| stb | 单文件公有领域库。 | ||
| Swarmz | 用于实时应用的群体(集群)行为库。 | ||
| tiny-differentiable-simulator | Tiny Differentiable Simulator 是一个零依赖的纯头文件 C++ 物理库。 | ||
| tinygltf | C++11 小型 glTF 2.0 库。 | ||
| tweeny | 一个现代 C++ 补间动画库。 | ||
| Vookoo | 消除 Vulkan 开发的痛苦。 | ||
| voxelizer | C99 纯头文件网格体素化器。 |
GPU
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| thrust | 并行编程库。 | ||
| vuda | 基于 Vulkan 的库,提供 CUDA Runtime API 接口,用于编写 GPU 加速应用程序。 | ||
| muda | 优雅的 kernel 启动、调试友好的内存访问器,以及针对 CUDA 的自动 CudaGraph 生成与更新。 |
Graph
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| CXXGraph | 图表示与算法库 >= C++17 | ||
| Graaf | 一个通用的轻量级 C++20 图库。 |
GUI
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| Centurion | 一个用于 SDL2 的现代 C++17/20 封装库。 | ||
| GuiLite | 适用于所有平台的最小化纯头文件 GUI 库(5 KLOC)。 | ||
| Nuklear | 即时模式跨平台 GUI 库。 | ||
| WinLamb | C++11 原生 Win32 GUI 库。 |
高性能计算
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| MPL | 基于 Message Passing Interface 标准的 C++11 消息传递库。 |
HTTP 与 Web
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| cinatra | [ | 现代(c++17)、跨平台的 Http 框架。 | [ |
| cpp-httplib | [ | 一个 C++11 跨平台 HTTP/HTTPS 库。 | [ |
| jwt-cpp | [ | 创建和验证 JSON web tokens。 | [ |
| RESTinio | [ | 异步 HTTP/WebSocket 服务器 C++14 库 | [ |
| cuehttp | [ | 用于 http(http/https)/websocket(ws/wss) 的现代 c++ 中间件框架。 | [ |
| libfv | [ | libfv 是一个 C++20 仅头文件网络库,支持 TCP/SSL/Http/websocket 服务器和客户端 | [ |
| NetIF | [ | C++14 中无需名称查找的跨平台网络接口地址。 | [ |
图像处理
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| BitmapPlusPlus | [ | 简单且快速的仅头文件 Bitmap (BMP) 库。 | [ |
| CImg | [ | Cool Image,单文件:功能齐全的图像处理。 | [ |
| color-util | [ | RGB、HSL、XYZ、Lab 等颜色的色彩空间转换器。 | [ |
| color | [ | 针对不同类型和格式的颜色操作/转换。 | [ |
| nanopm | [ | NanoPM,单头文件 PatchMatch。 | |
| noise2d | [ | 用于 C++17 及更高版本的 2D 噪声生成。 | [ |
语言绑定
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| jni.hpp | 一个现代、类型安全的 C++14 JNI 封装库。 | ||
| pybind11 | C++11 与 Python 之间的无缝互操作。 | ||
| Selene | 简单且对 C++11 友好的 Lua 绑定。 | ||
| Sol | Sol3 (sol2 v3.0) - 一个具有高级功能和顶级性能的 C++ <-> Lua API 封装库。 | ||
| v8pp | 将 C++ 函数和类绑定到 V8 JavaScript 引擎。 |
语言开发
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| Command Interpreter | 为任何 C++ 程序添加命令解释器(例如,REPL)。 |
日志记录
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| easyloggingpp | 单头文件 C++ 日志库。 | ||
| plog | 可移植、简单且可扩展的 C++ 日志库。 | ||
| spdlog | 快速的 C++ 日志库。 |
数学
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| amgcl | 使用代数多重网格方法求解大型稀疏线性方程组。 | ||
| dj_fft | FFT 库。 | ||
| eigen | 用于线性代数的模板库。 | ||
| exprtk | C++ 数学表达式工具包。 | ||
| fpm | 定点数学库。 | ||
| kfr | 快速 DSP 框架,FFT,采样率转换等。 | ||
| libmorton | 高效地编码/解码 2D/3D 坐标中的 Morton 码的方法。 | ||
| linalg | C++ 短向量数学库。 | ||
| matplotlib-cpp | 基于流行的 matplotlib 构建的 C++ 绘图库。 | ||
| mathplot | 用于仿真的数据可视化 (C++20)。 | ||
| matrix | C++20 中的 2D 矩阵库。 | ||
| NumCpp | Python Numpy 库的 C++ 实现。 | ||
| random | 具有便捷 API 的现代 C++ 随机数库。 | ||
| spectra | 用于大规模特征值问题的仅头文件 C++ 库。 | ||
| universal | 通用数字算术。 |
内存管理
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| ugc | 增量垃圾回收器。 |
模拟
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| FakeIt | 让 C++ 模拟变得简单。 | ||
| trompeloeil | C++14 模拟框架。 |
网络
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| asio | Asio C++ 库。 | ||
| asio-grpc | 使用 Asio/统一执行器的异步 gRPC。 | ||
| brynet | 跨平台 C++ TCP 网络库。 | ||
| cppzmq | libzmq 的仅头文件 C++ 绑定。 | ||
| nygma | 网络数据包处理与索引。 | ||
| uvw | 现代 C++ 中的 libuv 封装。 |
优化
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| ensmallen | 用于数值优化的 C++ 库。 |
解析
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| lexertl14 | 模块化词法分析器生成器。 | ||
| Matcheroni & Parseroni | 用于使用解析表达式文法进行模式匹配的 C++20 库 | ||
| parsertl14 | 模块化解析器生成器。 |
解析表达式文法
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| cpp-peglib | PEG(解析表达式文法)库。 | ||
| lug | 一种 C++17 嵌入式领域特定语言,用于将解析器表示为扩展 PEG。 | ||
| PEGTL | 解析表达式文法模板库。 |
可移植性定义
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| hedley | 将 #ifdef 移出你的代码。 | ![]() |
反射
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| better-enums | C++ 编译期枚举转字符串、迭代。 | ||
| magic_enum | 枚举的静态反射。 | ||
| meta | 无宏的运行时反射系统。 | ||
| nameof | 现代 C++ 的 nameof 运算符。 | ||
| refl-cpp | 编译期反射库。 | ||
| visit_struct | 用于结构体字段反射的微型库。 |
正则表达式
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| compile-time regular expressions | 编译期正则表达式匹配器。 | ||
| SRELL | 兼容 ECMAScript (JavaScript) 的正则表达式引擎。 |
机器人学
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| manif | 李理论的微型库。 |
序列化
| 库 | 星标数 | 描述 | 许可证 |
|---|---|---|---|
| alpaca | 使用 C++17 编写的序列化库。 | ||
| cereal | 一个用于序列化的 C++11 库。 | ||
| essentials | 透明的序列化/反序列化。 | ||
| fuser | 自动将 C++ 类型 (反)序列化为 JSON。 | ||
| YAS | 一个支持二进制/文本/JSON 归档的 C++11 (反)序列化库。 | ||
| cista | 简单、高性能、零拷贝的 C++ 序列化与反射库。 |
SIMD
| 库 | 星标数 |
