【C++】第三方库概览
本文最后更新于:2023年6月17日 下午 13:55
C++第三方库文件总览
boost_1_82_0
C++ Boost库
Boost是一个广受欢迎的、功能强大的C++库集合,提供了众多跨平台的工具和组件,覆盖了各种领域和应用场景。Boost库可以用于增强C++语言的功能和性能,包括智能指针、容器、算法、线程、正则表达式等。它还提供了数学计算、网络编程、图形图像处理、文件系统操作等方面的组件和功能,使开发者能够更快速、高效地开发出稳健、可靠的C++应用程序。Boost库的广泛应用领域包括系统开发、游戏开发、科学计算、金融领域等。
QuantLib-1.30
QuantLib金融量化库,有20年历史,较为古老,依赖boost库。
QuantLib是一个功能强大的C++金融计算库,专为金融工程和衍生品定价而设计。它提供了广泛的金融工具和模型,包括利率曲线、期权、债券、衍生品等,以及各种金融计算和分析功能。QuantLib可以用于定价、风险管理、投资组合分析、模拟等金融领域的计算和研究。它具有高度可定制性和可扩展性,被广泛应用于投资银行、资产管理、保险等金融机构以及学术界的金融研究。
ta-lib-0.4.0-msvc
TA-Lib金融量化库,使用C编写,有比较多的技术指标。
ta-lib是一个流行的C++技术分析库,用于金融市场数据的技术分析和指标计算。它提供了多种常用的技术分析指标,如移动平均线、相对强弱指标、布林带等,以及各种图表和图形工具。ta-lib可以用于市场趋势分析、价格波动预测、交易信号生成等金融领域的数据分析和决策支持。它被广泛应用于金融交易、量化投资、股票分析等领域,为金融专业人士和算法交易者提供了有力的工具和功能。
spdlog-1.11.0
超级快的C++日志库,内置fmt库。
spdlog是一个高性能的C++日志库,旨在提供简单易用的日志记录功能和灵活的日志输出选项。它支持多线程环境下的并发日志记录,提供了丰富的日志级别和格式控制选项。spdlog可以用于应用程序的日志记录、故障排查、性能分析和错误追踪等方面。它可以将日志输出到控制台、文件、远程服务器等多种目标,并支持多种日志格式,如标准输出、JSON、Syslog等。spdlog被广泛应用于各种C++项目,包括桌面应用、服务器应用、游戏开发等,为开发者提供了便捷、高效的日志管理工具。
rapidjson-1.1.0
用于 C++ 的超快 JSON 解析器/生成器,同时具有 SAX/DOM 样式 API。
但是据知乎所说,存在API垃圾难用、内存泄漏、解析错误等问题。
rapidjson是一个高效的C++ JSON解析和生成库,它提供了简单易用的API和功能丰富的工具,用于处理JSON数据。它可以用于解析和生成JSON格式的数据,支持高性能的数据读取和写入操作。rapidjson还提供了对JSON的查询、修改、验证和序列化等功能,使开发者能够轻松地处理和操作JSON数据,适用于各种应用领域,包括Web开发、网络通信、配置文件处理等。
nolhmann/json-v3.11.2
nolhmann/json是一个超级易于使用的优秀的 JSON 解析器 for Modern C++,使用UTF-8编码,文档齐全 ,易于使用,性能落后于rapidjson约5~6倍。
特点:
直观的语法:在像Python这样的语言中,JSON感觉就像一种一流的数据类型。我们使用了现代C++的所有运算符魔法,以在您的代码中实现相同的感觉。查看下面的示例,您就会知道我在说什么。
简单的集成:我们的整个代码只包含一个头文件json.hpp。就是这样。没有库,没有子项目,没有依赖,没有复杂的构建系统。该类是用普通的C++11编写的。总的来说,一切都不需要调整编译器标志或项目设置。
严格的测试:我们的代码经过了大量的单元测试,并覆盖了100%的代码,包括所有异常行为。此外,我们使用了Valgrind和Clang Sanitizers进行了内存泄漏的检查。Google OSS-Fuzz还针对所有解析器进行了模糊测试,每天运行24/7,迄今为止已执行数十亿次测试。为了保持高质量,该项目遵循核心基础设施倡议(CII)的最佳实践。
其他方面对我们来说不是很重要:
内存效率:每个JSON对象的开销为一个指针(联合的最大大小)和一个枚举元素(1字节)。默认的泛化使用以下C++数据类型:std::string用于字符串,int64_t、uint64_t或double用于数字,std::map用于对象,std::vector用于数组,bool用于布尔值。但是,您可以根据需要将通用类basic_json实例化为模板。
速度:市面上肯定有更快的JSON库。但是,如果您的目标是通过添加一个头文件来提供JSON支持来加快开发速度,那么这个库是您的选择。如果您知道如何使用std::vector或std::map,那么您已经准备好了。
yyjson-0.7.0
yyjson是目前最快的 C++ Json 库,比rapidjson快3~4倍。
特点:
- 快速:在现代CPU上可以每秒读取或写入千兆字节的JSON数据。
- 可移植:符合ANSI C(C89)标准,实现跨平台兼容性。
- 严格:符合RFC 8259 JSON标准,确保严格的数字格式和UTF-8验证。
- 可扩展:提供选项以允许注释、尾随逗号、NaN/Inf以及自定义内存分配器。
- 准确性:可以准确地读取和写入int64、uint64和double数字。
- 灵活:支持无限的JSON嵌套层次、000字符和非以null结尾的字符串。
- 操作:支持使用JSON Pointer、JSON Patch和JSON Merge Patch进行查询和修改。
- 开发者友好:只需一个头文件和一个源文件即可轻松集成。
限制:
- 数组或对象以链表等数据结构存储,这使得通过索引或键访问元素比使用迭代器慢。
- 对象中允许重复的键,并且键的顺序被保留。
- JSON解析结果是不可变的,需要进行可变拷贝才能进行修改。
nanomsg-1.1.5
nanomsg库是一个轻量级、高性能的通信库,旨在为开发者提供多种通信模式和模式组合的灵活性。它可以用于构建分布式系统、消息队列、实时数据传输、发布/订阅模式等多种通信应用,具有可扩展性和良好的性能表现。
nanomsg库可以被视为一个网络模块,它提供了一套网络通信的接口和协议,使得开发者能够在分布式系统中进行可靠的数据传输和通信。它支持多种网络传输协议,包括TCP、UDP、IPC(进程间通信)等,可以在不同的网络环境中使用。
pugixml-1.13
轻量级、简单且快速的 C++ XML 解析器,支持 XPath。
pugixml是一个轻量级的C++ XML处理库,具有以下特点:
- 类似DOM的接口,具有丰富的遍历和修改能力。
- 极快的非验证XML解析器,可以从XML文件/缓冲区构建DOM树。
- 支持XPath 1.0,用于复杂的数据驱动树查询。
- 完全支持Unicode,提供Unicode接口变体和自动编码转换。
该库非常易于移植和集成使用。您可以从存档中下载它(包含Windows/Unix换行符),从Git/Subversion存储库获取,作为主要Linux/BSD发行版(如Ubuntu、Debian、Fedora、Gentoo、Arch Linux、FreeBSD等)的软件包安装,也可以作为OSX软件包管理器(如Homebrew、MacPorts)的软件包安装,或者使用其他软件包管理器(如Conda)。
pugixml自2006年以来一直在开发和维护,并拥有众多用户。所有代码都采用MIT许可证分发,因此在开源和专有应用程序中都可以免费使用。
robin-map-v1.2.1
robin-map是使用罗宾汉哈希的快速哈希映射和哈希集的 C++ 实现
性能平均能达到目前std::unordered_map的10倍左右,并且在多个高负载项目中表现出了良好的稳定性OωO 高效HashMap——robin-map推荐 C++主流哈希映射实现的性能基准测试
测试项目 | 耗时 |
---|---|
std::unordered_map<int,int> | 3821432 |
std::unordered_map<int,int,nohashinit> | 3499231 |
std::unordered_map<int,int>(N) | 3810023 |
tsl::robin_map<int,int> | 404123 |
tsl::robin_map<int,int, nohashint> | 410218 |
tsl::robin_map<int,int>(N) | 399983 |