一、上期回顾掌握 STL 算法库sort、reverse、find、unique、最值、for_each从此不用手写大量循环逻辑。今天深挖C 模板搞懂为什么 vector、map 能存任意数据类型。二、模板核心作用模板 代码复用 类型通用不用为 int、double、string 写多套相似函数 / 类一套模板适配所有类型这就是泛型编程。三、函数模板1. 语法格式templatetypename T 函数返回值 函数名(形参) { // 逻辑使用 T 当做通用类型 }typename也可以换成class效果完全一样。2. 最简示例通用交换函数#include iostream using namespace std; // 函数模板 templatetypename T void swapVal(T a, T b) { T temp a; a b; b temp; } int main() { int a 10, b 20; double x 1.1, y 2.2; swapVal(a, b); swapVal(x, y); cout a b endl; cout x y endl; return 0; }自动类型推导传什么类型T 就是什么类型。3. 模板函数重载支持多个模板参数templatetypename T1, typename T2 void show(T1 a, T2 b) { cout a b endl; }四、类模板1. 作用实现通用类像vectorT、mapK,V底层都是类模板。2. 语法格式templatetypename T class 类名 { private: T 成员变量; public: 成员函数用 T };3. 示例通用栈类模板templatetypename T class MyStack { private: T arr[100]; int top; public: MyStack() : top(-1) {} void push(T val) { arr[top] val; } T pop() { return arr[top--]; } };4. 类模板使用int main() { MyStackint st1; st1.push(10); MyStackdouble st2; st2.push(3.14); return 0; }类模板必须显式指定类型不能自动推导。五、模板具体化特例化给特定类型单独定制逻辑优先级高于通用模板// 通用模板 templatetypename T void print(T a) { cout 通用版本 a endl; } // string 类型特例化 template void printstring(string a) { cout 字符串特化 a endl; }六、模板原理通俗理解模板不编译成实际代码只是一张图纸用到什么类型编译器自动实例化一份对应代码优点代码简洁、复用极强缺点代码膨胀、编译时间变长七、模板与普通函数区别普通函数固定类型复用性差模板函数一套代码适配所有类型模板可以自动类型推导类模板必须指定T八、今日核心总结模板分为函数模板、类模板templatetypename T定义通用类型函数模板可自动推导类型类模板必须显式指定类型模板特例化可以给特定类型单独实现STL 所有容器、算法底层全靠模板泛型支撑九、课后练习写函数模板实现求两个数最大值手写类模板MyArray支持存 int、double体会模板不用重复写多套类型代码