C++ 模板 核心知识点梳理

Search for a command to run...

No comments yet. Be the first to comment.
一、有序对和笛卡尔积 1、有序对(序偶):由两个元素 x 和 y 按照确定顺序排列组成的二元组,记作⟨x, y⟩ 2、笛卡尔积:以 A 中元素为第一元、B 中元素为第二元,构造所有有序对⟨x,y⟩; 由全部这类有序对构成的集合,称为 A 与 B 的笛卡尔积,记作 AXB 例题: 已知 A={a,b}, B={0,1,2},求笛卡尔积 A × B、B × A A × B(前元取自 A,后元取自 B

1、集合的概念 N元子集:含有n个元素的子集叫做N元子集. 例题:已知集合 A={1,2,3},按元素个数对 A 的所有子集分类 0元子集:∅ 1元子集:{1}, {2}, {3} 2 元子集:{1,2}, {1,3}, {2,3} 3 元子集:{1,2,3} 幂集:设 A 为集合,由 A 的全部子集构成的集合称为 A 的幂集,记作P(A). 例题:A={1,2,3},求A的幂集 答案:P

一、基本元件 元件 符号 说明 例子 个体词 a, b, c... 代表具体对象(常元) a:小明 个体变元 x, y, z... 代表任意对象 x 表示论域中任一元素 谓词 P(x), Q(x,y)... 表示性质或关系 P(x):x是学生; L(x,y):x喜欢y 量词 ∀, ∃ 修饰个体范围 ∀x(所有x); ∃x(存在x) 连接词 ¬, ∧, ∨, →, ↔ 命

本质是"逻辑推导游戏",给定几个前提,用固定规则一步步推出结论。套路固定,背下规则就能拿分。 一、核心推理规则公式: 假言推理(MP)A→B, A ⇒ B肯定前件→肯定后件拒取式(MT)A→B, ¬B ⇒ ¬A否定后件→否定前件假言三段论(HS)A→B, B→C ⇒ A→C蕴含传递析取三段论(DS)A∨B, ¬A ⇒ B否定一边得另一边附加律A ⇒ A∨B或上一个随便什么化简律A∧B ⇒ A (或

定义:S是一个联结词集合,若任一个命题公式都可以由s中的联结词表示出来命题公式与之等价,则称S是一个联结词完备集。 也就是说一个连接词集合,能表达出所有真值函数,称为完备集 以下是完备集: S1={¬,∧,∨} —— 否定、合取、析取 S2={¬,∧,∨,→} —— 否定、合取、析取、蕴涵 S3={¬,∧,∨,→,↔} —— 否定、合取、析取、蕴涵、等价 S4={¬,∧} —— 否定、

C++ 模板是泛型编程的核心,用来实现代码复用 + 类型无关,让一份代码支持多种数据类型,分为函数模板和类模板两大类。
一句话:模板就是代码的 “模具”,编译器会根据你传入的类型(int/double/ 自定义类等),自动生成对应类型的代码。
优点:代码复用、类型安全、无运行时开销
本质:编译期多态(不同于虚函数的运行时多态)
// 模板声明
template <typename T> // T 是类型参数(typename = class)class是以前写法不推荐
T add(T a, T b) {
return a + b;
}
2.使用方式
// 自动推导类型(推荐)
cout << add(1, 2) << endl; // int
cout << add(1.1, 2.2) << endl; // double
// 显式指定类型
cout << add<int>(3, 4) << endl;
注意:在使用该模板时,所有输入参数的类型必须保持一致,均为同一类型 T。
3.多参数模板
template <typename T1, typename T2>
void print(T1 a, T2 b) {
cout << a << " " << b << endl;
}
1.基本语法
template <typename T>
class MyVector {
private:
T* data;
public:
void push(T val);
};
// 类外实现成员函数
template <typename T>
void MyVector<T>::push(T val) {
// 逻辑
}
2.使用方式
类模板必须显式指定类型,无法自动推导,即:类模板在定义对象时,必须用 <类型> 显式告诉编译器
举个例子:在上述MyVector类创建int类型的vector:MyVecotr<int>(1)
3.非参数型模板参数
模板参数不只是类型,还可以是常量值(整数、指针等):
template <typename T, int SIZE> // SIZE 是数值
class Array {
T arr[SIZE];
};
// 使用
Array<int, 10> arr; // 定义一个大小为10的数组
1、在声明一个需要使用到模板的函数/类时,必须在其上方加上对应模板声明,即:一个模板对应一个函数/类,同一个 template<...> 不能同时给多个函数 / 类共用。
2、类模板必须写 <类型>,不能自动推导
3、函数模板可以自动推导,但参数类型必须一致