摘要:
奇异递归模板模式(CRTP)是一种惯用法,其中类 `X` 继承自类模板 `Y`,并以模板参数 `Z` 实例化 `Y`,其中 Z = X。例如:CRTP 可用于实现“编译时多态”,即基类公开一个接口,而派生类实现该接口。优势如下:
1. 与运行时多态相比,CRTP 不需要查虚函数表,函数可以被内联,供编译器优化的空间大。
2. 与裸继承相比,CRTP 使基类知道派生类的类型,并能把针对每个派生类的函数下放给派生类(即基类函数可以得知派生类)。
劣势:CRTP 是静态的,CRTP 会使代码体积膨胀。
典型示例如:单例模式、表达式模版 阅读全文
posted @ 2026-01-21 21:56
caijianhong
阅读(15)
评论(0)
推荐(0)
摘要:
从 $I=\varnothing$ 开始,重复以下步骤:
1. 建一张空的有向二分图,$I$ 是左部点,$E\setminus I$ 是右部点。
2. 枚举 $i\in I$,将两个拟阵的 $I'$ 设置为当前的 $I\setminus\{i\}$。枚举 $j\not\in I$,若拟阵 A `oracle(j)` 则连边 $i\to j$;若拟阵 B `oracle(j)` 则连边 $j\to i$;
3. 准备进行 BFS 找增广路。设置拟阵 A 的 $I'=I$,将所有 $i\not\in I$ 且能 `oracle` 的 $i$ 入队。
4. 进行 BFS,注意要维护**最短**的增广路,最短就是点数最少的意思;还要维护路径的前驱。
5. 设置拟阵 B 的 $I'=I$,枚举所有 $i\not\in I$ 且能 `oracle` 的 $i$,找出最短路最短的那个 $i$。
6. 从那个最短的点往回跳,将增广路上所有点在 $I$ 的状态取反。
5. 算法无法找出增广路时,算法结束,$I$ 就是答案。 阅读全文
posted @ 2026-01-21 21:54
caijianhong
阅读(20)
评论(0)
推荐(0)
浙公网安备 33010602011771号