C++常用库 & 源码
文章平均质量分 94
note
lvy-
专栏更新已迁至github:lvy010,文章.md可直接clone repo获取,欢迎email交流(`・ω・´)(该账号现主用于随手复习记录,随缘同步)
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
sl|deque实现|缓存命中率
deque底层实现与二分查找接口分块+中控数组在C++容器中, deque (双端队列)的底层设计和二分查找接口的支持性,结合分块思想与二分逻辑,可清晰梳理其设计原理与应用合理性。一、deque的底层实现核心1. 分块存储机制deque 并非连续线性存储,而是采用分块+中控数组的设计:数据被拆分到多个固定大小的内存块中,2. O(1)插入特性在 deque 首尾插入元素时,若对应块未存满,可直接放入实现O(1)时间复杂度;原创 2026-01-06 10:32:33 · 221 阅读 · 0 评论 -
宏定义看开源的依赖地狱:Drogon vs Trantor | a fix pr
底层依赖 | 棱形继承 | debain生态原创 2025-12-18 12:07:15 · 1289 阅读 · 0 评论 -
乱用upper_bound被惩罚了qwq|贪心
可以用diff模拟堆。原创 2025-11-13 22:32:07 · 383 阅读 · 0 评论 -
[RE2] 确定性有限自动机 | DFA::RunStateOnByte | `Prog::SearchDFA` - 入口点
DFA(确定性有限自动机)引擎是re2内部的一个强大工具,专为极快的线性时间正则表达式匹配而设计。它像一个精确的流程图一样运行,总是根据输入字符知道下一个状态应该是什么,从而避免了昂贵的回溯。虽然其确定性保证了速度,但对于非常复杂的模式,它可能会消耗大量内存来构建状态图。re2通过缓存状态并在必要时重置缓存或回退到其他引擎(如NFA)来智能地管理这一点。原创 2025-11-05 21:59:31 · 900 阅读 · 0 评论 -
[RE2] Prog对象(字节码) | Inst指令序列 | 字节映射和指令扁平化
Prog对象是re2将正则表达式编译后的高效字节码:将Regexp蓝图转换为线性Inst指令序列通过字节映射和指令扁平化等优化提升性能作为匹配引擎的直接执行基础原创 2025-11-05 21:56:32 · 724 阅读 · 0 评论 -
[RE2] Regexp对象 | shared_ptr | AST树
Regexp对象是正则表达式处理流程中的结构化中间表示:将原始字符串转换为机器友好的树形结构支持语法检查与优化预处理为后续编译阶段提供清晰蓝图原创 2025-11-05 21:49:51 · 1074 阅读 · 0 评论 -
[RE2] docs | FullMatch & PartialMatch | 自动匹配
RE2类作为高级接口:封装了正则表达式的完整生命周期自动选择最优匹配策略提供简洁易用的API接口原创 2025-11-05 21:35:19 · 616 阅读 · 0 评论 -
[fmt] 输出缓冲(`basic_memory_buffer`,`basic_appender`)
在本章中,我们探讨了fmt的核心输出缓冲机制,重点关注:basic_memory_buffer:动态的“临时便签”,高效存储格式化字符,利用小的内联缓冲区避免小字符串的分配,并在需要时动态增长。basic_appender:高效的“笔”,以最小开销直接将字符写入basic_memory_buffer,作为fmt的优化输出迭代器。我们已经了解了fmt如何在内存中收集格式化文本,确保像I/O和内存重新分配这样的高成本操作被最小化,从而实现快速高效的消息生成。原创 2025-11-04 22:01:39 · 425 阅读 · 0 评论 -
[fmt] 格式化器 (formatter<T, Char>) | 简单情况的`format_as`
在本章中,我们解锁了`fmt::formatter<T, Char>`的强大功能:* 它是**食谱书**,告诉`fmt`如何将任何特定数据类型`T`转换为格式化文本。* 你学会了通过为==自定义类型提供自己的`formatter`特化来扩展`fmt`的功能==,使它们能够像内置类型一样被格式化。* `parse`方法解释格式规范,`format`方法执行实际的文本转换。* 对于简单情况,`format_as`函数提供了一个方便的快捷方式,将自定义类型格式化为现有的可格式化类型。原创 2025-11-04 21:54:45 · 961 阅读 · 0 评论 -
[HDiffPatch] 补丁算法 | `patch_decompress_with_cache` | `getStreamClip` | RLE游程编码
补丁算法(`hpatch`)是差异生成过程的关键对应部分它==严谨遵循紧凑差异文件的指令,结合现有旧数据,重建新的更新数据==。HDiffPatch的`hpatch`设计高效,处理多种差异格式,并借助基于流的I/O和可选内存缓存扩展到超大文件。原创 2025-10-30 21:49:59 · 1224 阅读 · 0 评论 -
[HDiffPatch] 差异算法 | `serialize_compressed_diff`
差异算法(`hdiff`)是HDiffPatch的智能引擎,它细致比较数据的旧版本和新版本,识别公共部分(`覆盖`),并紧凑编码差异(`子差异`和`新数据差异`),生成易于共享或==存储的微小"差异文件"==- 巧妙的基于流I/O使该过程能扩展到超大文件而不会压垮内存。原创 2025-10-30 21:42:46 · 1319 阅读 · 0 评论 -
[HDiffPatch] docs | 基于流的输入输出 | hpatch_TFileStreamInput | read()
基于流的输入输出是一个强大概念,使HDiffPatch能够高效处理任意大小的文件而不会消耗过多内存通过定义通用的`hpatch_TStreamInput`和`hpatch_TStreamOutput`接口,并提供具体实现如`hpatch_TFileStreamInput`和`hpatch_TFileStreamOutput`,项目构建了灵活的基础架构。> 这种设计意味着其他数据源(如网络连接或内存缓冲区)也可以作为流集成,而无需更改核心差异/补丁逻辑。原创 2025-10-30 21:36:03 · 897 阅读 · 0 评论 -
[fmt] 格式字符串解析器(`parse_context`,`format_handler`) | syntax格式规范语言
在本章中,我们探讨了格式字符串解析器,揭示了`fmt`如何理解消息模板。了解到:* **`parse_context`** 充当"食谱书阅读器",==跟踪==格式字符串中的当前位置。* **`format_handler`** 是"厨师",根据`parse_context`读取的内容==执行操作==,如打印纯文本或格式化参数。* 这些内部组件协同工作,解释格式字符串语法,包括==参数ID、对齐和精度等格式说明符,以及动态值==。原创 2025-10-29 17:41:15 · 1001 阅读 · 0 评论 -
[fmt] 参数处理(`basic_format_arg`,`basic_format_args`)
在本章中,我们探讨了`fmt`如何理解和组织你想要格式化的数据,使用:* **`basic_format_arg`**:保存==单个==参数类型和值的"原料卡片"。* **`basic_format_args`**:收集==所有==参数卡片以进行处理的"食谱列表"。* **`dynamic_format_arg_store`**:用于在运行时==动态构建参数列表==的"原料组织器",支持位置和命名参数,并通过`std::cref`控制复制与引用。原创 2025-10-29 17:32:49 · 1008 阅读 · 0 评论 -
[fmt] 输入/输出适配器 | `fmt::print`|`fmt::format_to`|`fmt::output_file`
在本章中,我们探讨了 `fmt` 库的基础*输入/输出适配器*:`fmt::print`、`fmt::format_to` 和 `fmt::output_file`。你学到了:* **`fmt::print`** 是将格式化文本显示到控制台或 C 风格 `FILE*` 流的直接工具。* **`fmt::format_to`** 提供了细粒度控制,可以在==内存中构建格式化字符串==,写入各种输出迭代器(如 `fmt::memory_buffer` 或固定大小的数组)。原创 2025-10-29 17:24:50 · 857 阅读 · 0 评论 -
[fmt] docs | 现代格式化库
`fmt` 项目是一个**现代 C++ 格式化库**,专为*速度、安全性和易用性*而设计原创 2025-10-29 17:16:03 · 916 阅读 · 0 评论 -
[cpprestsdk] ~异步流处理(eg`basic_istream`、`basic_ostream`、`streambuf`) 底层
1. **生产者-消费者模式**:结合`producer_consumer_buffer`实现高效数据管道2. **自定义流适配器**:继承`basic_streambuf`实现特定协议解析3. **性能调优**:通过缓冲策略和并行处理提升吞吐量原创 2025-10-24 19:40:35 · 714 阅读 · 1 评论 -
[cpprestsdk] JSON类--数据处理 (`json::value`, `json::object`, `json::array`)
1. 高效解析网络API返回的复杂数据结构2. 动态构建符合业务需求的JSON消息3. 实现完整的HTTP请求-响应闭环处理原创 2025-10-24 19:30:30 · 780 阅读 · 0 评论 -
[cpprestsdk] 异步编程模型 | `pplx::task<T>`| `.get()`&`.then()`
利用`pplx::task`及其`then()`方法,可以构建响应式、高效的应用程序,执行网络请求和其他长时间运行的操作,而==不会冻结==用户界面或占用主程序线程。原创 2025-10-24 19:24:24 · 826 阅读 · 0 评论 -
[OP-Agent] 确定性有限自动机(DFA) | 高性能正则库`re2`
DFA是OPA实现高性能正则匹配的核心技术,通过状态机模型避免回溯,配合字节分类等优化技术,使复杂模式匹配也能在微秒级完成。理解DFA工作机制有助于编写高效的正则策略。原创 2025-10-24 17:14:44 · 514 阅读 · 0 评论 -
[cpprestsdk] http_client_config | GET | request()
1. 使用`web::uri`定义Web服务的基础地址。2. 使用`http_client_config`配置客户端的行为。3. 创建`http_client`实例。4. 构建`http_request`对象。5. 使用`client.request()`发送这些请求并接收`http_response`对象。原创 2025-10-11 21:00:03 · 946 阅读 · 1 评论 -
[cpprestsdk] 构建HTTP消息 | http_headers.h
现在知道如何构建准备发送的`http_request`以及如何准备解析`http_response`。可以指定方法、目标URI、正文内容,并为请求和响应自定义头部。理解如何==构建HTTP消息==至关重要原创 2025-10-11 20:54:15 · 886 阅读 · 0 评论 -
[cpprestsdk] 统一资源标识符 | uri_builder
正确构建和管理URI(统一资源标识符==)是网络通信的第一个关键步骤。现在知道了如何==精确定位互联网上的资源==,下一步是学习如何==打包和向该地址发送消息原创 2025-10-11 20:43:24 · 1084 阅读 · 0 评论 -
[simdjson] ondemand::value | object & array
`value`是表示单个JSON元素的临时句柄- 通过数组迭代、对象字段访问或文档根获取- 使用`type()`判断类型,`get_...()`提取内容- 具有临时性特征,需及时处理数据- 底层依赖解析器状态和原始数据缓冲区* `对象句柄`支持==按键==查找和遍历字段* `数组句柄`支持遍历和==索引==访问(注意O(N)复杂度)* 所有句柄均为==临时==视图,需及时处理数据* ==操作会消耗迭代位置,禁止重复访问==原创 2025-07-20 10:26:24 · 892 阅读 · 0 评论 -
[simdjson] `error_code` | .get() | 异常 | is_fatal() | current_location() | 链式处理
* 可能失败的操作返回`simdjson_result<T>`,保存成功值或错误码* 可通过`.error()`或`.get(value)`显式检查错误,或在启用C++异常时使用`try...catch`块并转换结果或调用`.value()`* `simdjson::error_message()`提供错误码的人类可读描述* 部分错误是`fatal`(`is_fatal()`),需放弃当前解析器实例;其他是`recoverable`原创 2025-07-20 15:09:50 · 1149 阅读 · 0 评论 -
[simdjson] 实现不同CPU调度 | 自动硬件适配的抽象
1. simdjson基础用法2. 按需API解析和导航JSON3. 错误处理和文档流处理4. 理解自动硬件优化机制原创 2025-07-20 20:25:23 · 779 阅读 · 0 评论 -
[simdjson] Quick Start | 解析器 | `复用写`思想 | cpu simd✔️ vs gpu cuda
创建单个解析器实例并复用于多个JSON文档,通过`内存复用`实现高性能。==创建解析器后调用方法(此处为`iterate`)启动处理。关键区别在于On-Demand API`不会立即`完整解析文档,而是==按需访问==。原创 2025-07-16 17:02:39 · 1581 阅读 · 0 评论 -
[simdjson] 填充字符串 | `document` 对象 | on-demand 模式
传统 DOM 解析(如 `simdjson::document`)需完整解析整个 JSON 到内存树,而 ==on-demand 模式将解析延迟到字段访问时,更适合流式处理或大型文件。==原创 2025-07-18 18:22:22 · 948 阅读 · 0 评论 -
[simdjson] document_stream | iterate_many() | batch_size | 线程加速 | 轻量handle
* 通过`parser.iterate_many(padded_data, ...)`获取文档流* 用范围for循环迭代流:`for (auto doc_result : stream)`* 循环项是表示流中文档的`simdjson_result<document_reference>`,访问前需检查错误* `batch_size`参数控制阶段1处理块大小,应不小于最大文档* 启用线程时,`iterate_many`可重叠下批次阶段1与当前批次处理,极大提升吞吐* 循环中`document_ref原创 2025-07-20 19:17:23 · 1058 阅读 · 0 评论 -
[muduo] ThreadPool | TcpClient | 异步任务 | 通信测试
**EventLoop绑定** 完全在单个事件循环线程内运行,这种经典抽象简化了 并发控制原创 2025-06-21 18:18:36 · 943 阅读 · 0 评论 -
[muduo] Buffer缓冲区 | TcpServer | Reactor模式
Reactor 模式 = 1 个前台 + N 个专项服务员 → 资源利用率最大化核心思想:又加了一层,实现了内聚和各司其职原创 2025-06-21 16:33:02 · 1001 阅读 · 0 评论 -
[muduo] TcpConnection | 回调交互
note原创 2025-06-21 12:37:02 · 1055 阅读 · 0 评论 -
[muduo] Poller轮询器 | 定时器队列
网络库定时管理的典范实现原创 2025-06-20 18:11:20 · 1059 阅读 · 0 评论 -
[muduo] Channel通道 | Tie机制 | 边缘触发ET & LT
note原创 2025-06-20 16:36:41 · 683 阅读 · 0 评论 -
[muduo_1] docs | 配置教程 | EventLoop | Thread
note原创 2025-06-20 12:46:38 · 1286 阅读 · 2 评论
分享