摘要: C++ 函数调用的解析过程 一次 C++ 函数调用(含普通函数、成员函数、运算符重载、构造函数等)的大致流水线是: 名字查找(name lookup) ➜ 找到可能的候选(含未限定查找与 ADL)。 构建候选集 ➜ 普通函数 + 模板函数 + 成员函数/隐式对象参数 + 内置运算符/用户自定义运算符 阅读全文
posted @ 2025-08-30 22:27 _Sylvan 阅读(15) 评论(0) 推荐(0)
摘要: constexpr 关键字 constexpr 表示“编译期常量”,即表达式、变量或函数的值必须能在编译期被求出来。 与 const 的区别 const constexpr 表示“只读”(不可修改) 表示“编译期常量表达式” 值可能是运行期确定 值必须是编译期可确定 可用于任何类型 要求类型支持编译 阅读全文
posted @ 2025-08-21 19:43 _Sylvan 阅读(24) 评论(0) 推荐(0)
摘要: 配接器 STL 配接器(Adapters)概览 STL 中的 配接器(adapter) 是一种设计模式,用于将某个组件的接口转换成另一种接口,从而实现不同组件间的协作。它的作用类似“轴承”或“转换器”,让原本不兼容的类能够一起运作。 STL 的配接器可分为三大类: 类型 作用对象 功能 Contai 阅读全文
posted @ 2025-08-16 18:27 _Sylvan 阅读(15) 评论(0) 推荐(0)
摘要: 仿函数 STL 中的仿函数(Functors / Function Objects) 名称来源 Functors(仿函数):早期命名,中文翻译独特、形象。 Function Objects(函数对象):C++ 标准采用的正式名称,更贴切其“对象具有函数特质”的本质。 概念 仿函数是一个行为类似函数的 阅读全文
posted @ 2025-08-16 18:27 _Sylvan 阅读(30) 评论(0) 推荐(0)
摘要: 算法的泛化过程 传统做法:写一个针对某种特定容器的算法,例如在 array 中查找特定值。 缺点:算法过于依赖容器实现细节(如数组大小 arraysize),无法复用。 基础版本:array 专用 find int* find(int* arrayHead, int arraySize, int v 阅读全文
posted @ 2025-08-16 18:26 _Sylvan 阅读(6) 评论(0) 推荐(0)
摘要: hashtable Hashtable 的桶(buckets)与节点(nodes) 在 SGI STL 的源码中,哈希表内部的数组单元称为桶(bucket)。 每个桶不仅是一个简单的节点,而是维护了一个链表(linked list),存储所有哈希值映射到该桶的元素。 链表中的每个元素称为节点(nod 阅读全文
posted @ 2025-08-10 12:57 _Sylvan 阅读(13) 评论(0) 推荐(0)
摘要: hashtable 前置知识 二叉搜索树(BST):平均时间复杂度是对数级 O(log n),但前提是假设输入数据有足够随机性。 红黑树(RB-tree):一种高效的平衡二叉搜索树,STL set / map 底层采用。 hashtable(散列表):在插入、删除、查找等操作上,可以实现常数平均时间 阅读全文
posted @ 2025-08-10 12:57 _Sylvan 阅读(9) 评论(0) 推荐(0)
摘要: git tag git tag 是 Git 中用来给特定提交(commit)打上“标签”(Tag)的命令,主要用于标记版本发布点,便于版本管理和查找。 标签的类型 轻量标签(Lightweight Tag) 类似于一个不会变动的分支引用,只是给某个 commit 打个简单标记 不包含额外元信息(作者 阅读全文
posted @ 2025-08-10 12:56 _Sylvan 阅读(31) 评论(0) 推荐(0)
摘要: 使用 Qt + Inno Setup 打包桌面应用 添加 Qt 应用图标(.ico) Windows 桌面应用默认是没有图标的,为了提升可识别性和专业性,我们通常会给应用添加一个 .ico 图标文件。 制作 .ico 图标 如果已经有 .png、.jpg 或 .webp 格式图像,可以使用以下方式生 阅读全文
posted @ 2025-08-10 12:55 _Sylvan 阅读(84) 评论(0) 推荐(0)
摘要: 用 QStyledItemDelegate 自定义 QListView Item 外观 Qt 提供的 QListView 默认只支持文本/图标列表,而现实中我们经常需要显示更复杂的内容,比如一行里显示多个“基因标签”、“操作按钮”或其他控件。 技术核心: 使用 QAbstractListModel 阅读全文
posted @ 2025-08-10 12:55 _Sylvan 阅读(103) 评论(0) 推荐(0)
摘要: RB-Tree(下) RB-tree的构造与内存管理 RB-tree 定义了一个专用的空间分配器 rb_tree_node_allocator,它的分配策略是——每次只分配恰好一个节点的空间。 // 红黑树类模板定义 template <class Key, // 键类型(红黑树的排序依据) cla 阅读全文
posted @ 2025-08-10 12:54 _Sylvan 阅读(8) 评论(0) 推荐(0)
摘要: RB-Tree(上) RB-tree(红黑树)是加了平衡条件的二叉搜索树,需满足以下规则: 每个节点非红即黑。 根节点是黑色。 红节点不能有红色子节点(即不能连续红)。 从任一节点到其所有 NULL(叶端)路径上的黑节点数相同。 这些路径是指:从某个节点出发,往下走到“空指针”结束(即 NULL 节 阅读全文
posted @ 2025-08-10 12:54 _Sylvan 阅读(14) 评论(0) 推荐(0)
摘要: CPU中的“模式位” 操作系统(OS)处于软件和硬件之间,它管理内存、磁盘、网络、外设,并为用户程序提供接口。但问题来了: 为什么用户程序不能直接操作硬件?为什么一定要通过操作系统? 因为硬件资源是共享的。操作系统必须防止恶意程序(或者有bug的程序)直接操作硬件,否则可能导致数据损坏、隐私泄露甚至 阅读全文
posted @ 2025-08-10 12:51 _Sylvan 阅读(55) 评论(0) 推荐(0)
摘要: 进程间通信的两种方式 什么是进程间通信(IPC)? 进程(Process)是程序在操作系统中的运行实例,具有独立的: 代码段 数据段(内存空间) 文件描述符 IO 资源等 操作系统为安全性默认对进程进行隔离,但在实际开发中,进程之间往往需要协作与数据共享,于是就有了 IPC。 IPC(Inter-P 阅读全文
posted @ 2025-08-10 12:50 _Sylvan 阅读(65) 评论(0) 推荐(0)
摘要: RB-Tree 前置知识 二叉搜索树 二叉树 二叉树(binary tree) 是一种每个节点最多有两个子节点的数据结构,分别称为左子节点和右子节点。可以用递归方式定义:一个非空二叉树由一个根节点和左右子树组成,左右子树本身也是二叉树,且可以为空。 二叉树用途广泛,例如表达式树、哈夫曼编码树等都属于 阅读全文
posted @ 2025-08-10 12:49 _Sylvan 阅读(10) 评论(0) 推荐(0)