数学知识模板
试除法判定质数 试除法分解质因数 朴素筛法求素数 线性筛法求素数 试除法求所有约数 约数个数和约数之和 欧几里得算法 求欧拉函数 筛法求欧拉函数 快速幂 扩展欧几里得算法 高斯消元 递归法求组合数 通过预处理逆元的方式求组合数 Lucas定理 分解质因数法求组合数 卡特兰数 NI...
试除法判定质数 试除法分解质因数 朴素筛法求素数 线性筛法求素数 试除法求所有约数 约数个数和约数之和 欧几里得算法 求欧拉函数 筛法求欧拉函数 快速幂 扩展欧几里得算法 高斯消元 递归法求组合数 通过预处理逆元的方式求组合数 Lucas定理 分解质因数法求组合数 卡特兰数 NI...
std::variant 与 std::visit 概述 std::variant 是 C++17 标准库提供的类型安全联合体 variant 解决什么问题 假设服务器收到的消息可能是 任意时刻,一条消息只会是其中一种 传统做法是手工组合枚举和 union 问题在于: 必须手动记...
模板 概述 C++模板是一个强大的编程工具,使得可以编写通用的、类型安全的代码 模板主要用于函数和类的泛型编程,允许你定义通用算法和数据结构,然后在需要时使用具体类型进行实例化 使用场景 通用算法: 模板允许你编写通用算法,如排序、搜索等,而无需针对每种类型重复实现 容器类: 标...
模板错误与调试 概述 模板报错之所以经常出现几百行,不是因为真正存在几百个错误,而是因为编译器必须告诉你: 最外层调用了哪个模板 它实例化了哪个内部模板 内部模板又实例化了什么 最终哪个表达式不合法 最小示例 下面代码不能编译 模板代码什么时候被检查 模板通常经历以下阶段: 阶段...
概述 首先,stack是一个容器适配器 理论上,任何提供了 push_back(), pop_back(), back()等操作的序列容器都可以作为 stack的底层容器 为什么默认是deque deque之所以成为默认选择,是因为它在以下几个方面取得了最佳平衡: 相对于vect...
模板定制体系 概述 大型模板库必须解决一个核心问题 库作者写好了通用算法,但怎样允许用户为自己的类型提供特殊行为 C++ 中没有唯一的定制机制,而是形成了一组工具 机制 最适合表达 traits 这个类型具有什么静态信息 policy 这个组件采用哪一种行为策略 tag disp...
同步 I/O:服务端 code 同步 I/O:客户端 code 异步I/O:服务端 code 异步I/O:客户端 code 定时器 code 线程池 code strand 概述 io_context::run() 可以被多个线程同时调用(线程池模式)。这时候多个 handler...
大型模板源码阅读 概述 阅读大型模板项目时,最容易犯的错误是 从公共 API 跳进第一个模板定义,然后试图把所有分支、所有类型和所有平台代码全部看懂 正确方法是先固定一个具体调用,只追踪它实际经过的路径 我们只关心: 这个调用中每个模板参数是什么 最终选中了哪个重载 哪些对象被复...
函数模板与实例化 模板是什么 普通函数只能处理声明好的类型 如果还要处理 double、std::string,不使用模板就需要重复编写 模板的作用是 描述一组具有相同结构、但类型不同的函数 这段代码本身不是一个普通函数,而是一个函数模板,也可以理解为编译器生成函数的“配方” 模...
非类型模板参数 NTTP 概述 前面使用的模板参数都是“类型” 非类型模板参数传递的是编译期常量值 固定容量的栈 值也是类型身份的一部分 下面是两个完全不同的类型 非类型模板实参必须是编译期常量 合法 不合法 Capacity 不会作为普通成员存储 Capacity 是编译期值,...
搜索当前标签